diff --git a/partner_statement/README.rst b/partner_statement/README.rst new file mode 100644 index 00000000..fc0d16ef --- /dev/null +++ b/partner_statement/README.rst @@ -0,0 +1,132 @@ +================= +Partner Statement +================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--financial--reporting-lightgray.png?logo=github + :target: https://github.com/OCA/account-financial-reporting/tree/12.0/partner_statement + :alt: OCA/account-financial-reporting +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-financial-reporting-12-0/account-financial-reporting-12-0-partner_statement + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/91/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Invoicing to support the printing of customer and vendor statements. +There are two types of statements, Activity and Outstanding. Aging details can be shown in the reports, expressed in aging buckets, +so the customer or vendor can review how much is open, due or overdue. + +The activity statement provides details of all activity on the partner receivables or payables +between two selected dates. This includes all invoices, refunds and payments. +Any outstanding balance dated prior to the chosen statement period will appear +as a forward balance at the top of the statement. The list is displayed in chronological +order and is split by currencies. + +The outstanding statement provides details of all outstanding partner receivables or payables +up to a particular date. This includes all unpaid invoices, unclaimed refunds and +outstanding payments. The list is displayed in chronological order and is split by currencies. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + + +Users willing to access to this report should have proper Accounting & Finance rights: + +#. Go to *Settings / Users* and edit your user to add the corresponding access rights as follows. +#. In *Application / Accounting & Finance*, select *Billing* or *Billing Manager* + +To configure this module, you need to: + +#. Go to *Configuration / Settings* +#. Under the *Followup Section* of *Accounting* option select either or both of OCA Activity or Outstanding Statement +#. Once selected, you may set default options for the reports. +#. Click *Save* + +Removing the wizard from menus follows the same process. + +Usage +===== + +To use this module, you need to: + +#. Go to Invoicing > Sales > Master Data > Customers or Invoicing > Purchases > Master Data > Vendors and select one or more +#. Press 'Action > Partner Activity Statement' or 'Action > Partner Outstanding Statement' respectively. +#. Indicate if you want to display receivables or payables, and if you want to display aging buckets and the aging type. +#. Optionally complete advanced options such as filtering non due or negative balance partners. + +Known issues / Roadmap +====================== + +* Email template. +* Expose reports (using defaults) to billing users while restricting the wizard to managers option. +* Concept of statement run - to start an async job to send out all statements. + +Changelog +========= + +12.0.1.0.0 (2018-11-08) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [BREAKING] Modules customer_activity_statement and customer_outstanding_statement merged to create partner_statement. +* [ADD] New features. + * Age by months or days + * Filter negative balances + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Eficent + +Contributors +~~~~~~~~~~~~ + +* Miquel Raïch +* Graeme Gellatly + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/account-financial-reporting `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_statement/__init__.py b/partner_statement/__init__.py new file mode 100644 index 00000000..997d84a6 --- /dev/null +++ b/partner_statement/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import report +from . import wizard diff --git a/partner_statement/__manifest__.py b/partner_statement/__manifest__.py new file mode 100644 index 00000000..f4b4299d --- /dev/null +++ b/partner_statement/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Partner Statement', + 'version': '12.0.1.0.0', + 'category': 'Accounting & Finance', + 'summary': 'OCA Financial Reports', + 'author': "Eficent, Odoo Community Association (OCA)", + 'website': 'https://github.com/OCA/account-financial-reporting', + 'license': 'AGPL-3', + 'depends': [ + 'account', + ], + 'data': [ + 'security/statement_security.xml', + 'views/activity_statement.xml', + 'views/outstanding_statement.xml', + 'views/assets.xml', + 'views/aging_buckets.xml', + 'views/res_config_settings.xml', + 'wizard/statement_wizard.xml', + ], + 'installable': True, + 'application': False, +} diff --git a/partner_statement/i18n/ca.po b/partner_statement/i18n/ca.po new file mode 100644 index 00000000..2ec6ca74 --- /dev/null +++ b/partner_statement/i18n/ca.po @@ -0,0 +1,251 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Marc Tormo i Bochaca , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-26 02:44+0000\n" +"PO-Revision-Date: 2017-04-26 02:44+0000\n" +"Last-Translator: Marc Tormo i Bochaca , 2017\n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Balanç " + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Cancel·lar " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Empresa " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Creat per " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Creat a " + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Nom a mostrar " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Última modificació a " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Última actualització per " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Última actualització a " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "o" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/de.po b/partner_statement/i18n/de.po new file mode 100644 index 00000000..b95a6efe --- /dev/null +++ b/partner_statement/i18n/de.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# OCA Transbot , 2018 +# Rudolf Schnapka , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-28 10:11+0000\n" +"PO-Revision-Date: 2018-08-23 13:16+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.1.1\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "+120 Tage fällig" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "1-30 Tage fällig" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "30-60 Tage fällig" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "60-90 Tage fällig" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "90-120 Tage fällig" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "Der Partner hat keine offenen Posten." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "Aktivitätenbericht" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "Aktivitätenbericht zwischen" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "Fälligkeiten Bericht zu" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" +"Die einzelnen Fälligkeiten können im Bericht, nach Altersgruppen (30 Tage " +"fällig,....) gegliedert, ausgewertet werden, so dass der Kunde überprüfen " +"kann, wie viel offen, fällig oder überfällig ist." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "Betrag" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "Fälliger Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "Saldovortrag" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Abbrechen" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Unternehmen" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Angelegt von" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Angelegt am" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "Aktuell fällig" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "Kundenaktivitätsnachweis" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "Assistent zum Kundenaktivitätsnachweis" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Datum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "Enddatum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "Anfangsdatum" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "Datum:" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "Beschreibung" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "Unterdrücke Partner ohne fällige Posten" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "Endsaldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Export PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "Schliesse Altersgruppen ein" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "Nummeriere Partner" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "Partner-Ref.:" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "Referenznummer" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "Berichtsaktion zu PDF" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" +"Die Aktivitätsübersicht gibt Auskunft über alle Aktivitäten auf den " +"Kundenforderungen zwischen zwei ausgewählten Terminen. Dies schließt " +"Rechnungen, Rückerstattungen und Zahlungen ein. Ein ausstehender Saldo, der " +"vor dem gewählten Abrechnungszeitraum liegt, wird als Saldovortrag am Anfang " +"der Abrechnung ausgewiesen. Die Liste wird in chronologischer Reihenfolge " +"angezeigt und ist nach Währungen gegliedert." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "und" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "in" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "oder" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "report.customer_activity_statement.statement" diff --git a/partner_statement/i18n/es.po b/partner_statement/i18n/es.po new file mode 100644 index 00000000..fe8971f5 --- /dev/null +++ b/partner_statement/i18n/es.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# OCA Transbot , 2017 +# Gelo Joga Landoo , 2017 +# Pedro M. Baeza , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-22 16:14+0000\n" +"PO-Revision-Date: 2018-10-23 03:45+0000\n" +"Last-Translator: Jordi Ballester Alomar \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.2.1\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "+120 Días" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "1- 30 Días" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "30-60 Días" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "60-90 Días" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "90-120 Días" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "Este cliente no tiene pagos pendietes" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "Informe the Saldo de Cuenta" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "Informe de Saldo de Cuenta entre" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "Reporte de vencidos al" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" +"Los detalles de saldos vencidos pueden ser mostrados en reporte, mostrados " +"en periodos.… (30 días, ...), para que el cliente pueda revisar cuánto está " +"abierto, a tiempo o vencido." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "Total" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "Saldo Pendiente" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Compañía" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "Saldo a la Fecha" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "Estado de Cuenta de Cliente" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "Asistente de Estado de Cuenta de Cliente" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Fecha" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "Fecha" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "Fecha Inicio" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "Fecha:" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "Descripción" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "No mostrar clientes sin saldo pendiente" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "Saldo Final" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Exportar a PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "Inluir Períodos de Mora" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "Número de Cliente" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "Ref. de Cliente:" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "Número de Referencia" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "Acción Estado a PDF" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" +"El estado de cuenta provee detalles de toda la actividad en……las cuentas por " +"cobrar del cliente entre dos fechas seleccionadas. Esto incluye todas las " +"facturas,……reembolsos y pagos. Cualquier saldo pendiente fechado antes del……" +"periodo elegido aparecerá como un saldo arrastrado arriba del estado de " +"cuenta. La lista es……mostrada en orden cronológico y es dividido por monedas." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "y" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "en" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "o" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "reporte.estado_de_cuenta_cliente.estado" diff --git a/partner_statement/i18n/fr.po b/partner_statement/i18n/fr.po new file mode 100644 index 00000000..064ea12d --- /dev/null +++ b/partner_statement/i18n/fr.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# OCA Transbot , 2018 +# Quentin THEURET , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-28 10:11+0000\n" +"PO-Revision-Date: 2018-09-01 08:20+0000\n" +"Last-Translator: Valaeys Stéphane \n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.1.1\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "+120 jours d'arriérés" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "1-30 jours d'arriérés" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "30-60 jours d'arriérés" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "60-90 jours d'arriérés" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "90-120 jours d'arriérés" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" +"Le partenaire n'a pas d'écriture en attente de paiement." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "Relevé de compte" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "Relevé de compte entre" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "Balance âgée au" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" +"Le détail des arriérés peut être affiché dans le rapport, exprimé par " +"tranche (30 jours d'arriérés, ...), de telle sorte que le destinataire " +"puisse voir combien est ouvert, dû ou échu." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "Montant" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Solde" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "Solde dû" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "Solde reporté" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Annuler" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Société" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "Dû en ce moment" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "Relevé de compte des partenaires" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "Assistant d'édition de relevé de compte des partenaires" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Date" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "Jusqu'au" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "À partir du" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "Date :" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "Description" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "Masquer les partenaires sans soldes ouverts" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "Solde final" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Exporter en PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "Afficher les arriérés par tranche" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "Numéro du partenaire" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "Réf. partenaire :" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "Numéro de référence" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "Export du relevé de compte en PDF" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" +"Le relevé de compte présente le détail des activités des débiteurs ou " +"créanciers entre deux dates choisies. Ceci inclus toute facture, note de " +"crédit ou paiement. Si un solde ouvert est préalable à la date de début du " +"relevé, il sera affiché comme un solde reporté en haut du relevé. Les " +"transactions sont présentées par ordre chronologique et ventilées par devise." + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "et" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "en" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "ou" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "report.customer_activity_statement.statement" diff --git a/partner_statement/i18n/hr_HR.po b/partner_statement/i18n/hr_HR.po new file mode 100644 index 00000000..ae22438d --- /dev/null +++ b/partner_statement/i18n/hr_HR.po @@ -0,0 +1,254 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-22 16:14+0000\n" +"PO-Revision-Date: 2017-12-22 16:14+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/" +"hr_HR/)\n" +"Language: hr_HR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Otkaži" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Tvrtka" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Datum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +#, fuzzy +msgid "Date End" +msgstr "Datum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Naziv " + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Izvoz PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "ili" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/it.po b/partner_statement/i18n/it.po new file mode 100644 index 00000000..b613c978 --- /dev/null +++ b/partner_statement/i18n/it.po @@ -0,0 +1,252 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Stefano , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-22 23:13+0000\n" +"PO-Revision-Date: 2017-12-22 23:13+0000\n" +"Last-Translator: Stefano , 2017\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Cancellare" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Azienda" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Data" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +#, fuzzy +msgid "Date End" +msgstr "Data" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Nome mostrato" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "o" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/nl.po b/partner_statement/i18n/nl.po new file mode 100644 index 00000000..c92c6ceb --- /dev/null +++ b/partner_statement/i18n/nl.po @@ -0,0 +1,251 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Melroy van den Berg , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-28 10:11+0000\n" +"PO-Revision-Date: 2018-02-28 10:11+0000\n" +"Last-Translator: Melroy van den Berg , 2018\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Balans" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Annuleren" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Bedrijf" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Gecreëerd door" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Gecreëerd op" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Laatst Gewijzigd op" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Laatst Geüpdatet door" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Laatst Geüpdatet op" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "of" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/nl_NL.po b/partner_statement/i18n/nl_NL.po new file mode 100644 index 00000000..f585c7ec --- /dev/null +++ b/partner_statement/i18n/nl_NL.po @@ -0,0 +1,253 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-22 16:14+0000\n" +"PO-Revision-Date: 2017-12-22 16:14+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Annuleer" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Bedrijf" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Datum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +#, fuzzy +msgid "Date End" +msgstr "Datum" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Export PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/partner_statement.pot b/partner_statement/i18n/partner_statement.pot new file mode 100644 index 00000000..693b21b9 --- /dev/null +++ b/partner_statement/i18n/partner_statement.pot @@ -0,0 +1,249 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_account_type +msgid "Account type" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Aging details can be shown in the report, expressed in aging buckets (30 days due, ...), so the customer or vendor can review how much is open, due or overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Partner Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: selection:customer.activity.statement.wizard,account_type:0 +msgid "Payable" +msgstr "" + +#. module: customer_activity_statement +#: selection:customer.activity.statement.wizard,account_type:0 +msgid "Receivable" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "The activity statement provides details of all activity on a partner's receivables and payables between two selected dates. This includes all invoices, refunds and payments. Any outstanding balance dated prior to the chosen statement period will appear as a forward balance at the top of the statement. The list is displayed in chronological order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" + diff --git a/partner_statement/i18n/pt.po b/partner_statement/i18n/pt.po new file mode 100644 index 00000000..4c8f7c5d --- /dev/null +++ b/partner_statement/i18n/pt.po @@ -0,0 +1,253 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Pedro Castro Silva , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-22 16:14+0000\n" +"PO-Revision-Date: 2017-12-22 16:14+0000\n" +"Last-Translator: Pedro Castro Silva , " +"2017\n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "Saldo" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Empresa" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "Criado em" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Data" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +#, fuzzy +msgid "Date End" +msgstr "Data" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "Exibir nome" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "Exportar PDF" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "Última modificação em" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "Última atualização em" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "Última atualização por" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "ou" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/i18n/ro.po b/partner_statement/i18n/ro.po new file mode 100644 index 00000000..b2f4b315 --- /dev/null +++ b/partner_statement/i18n/ro.po @@ -0,0 +1,252 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * customer_activity_statement +# +# Translators: +# Dorin Hongu , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-16 08:14+0000\n" +"PO-Revision-Date: 2018-03-16 08:14+0000\n" +"Last-Translator: Dorin Hongu , 2018\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "+120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "1-30 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "30-60 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "60-90 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "90-120 Days Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "The partner doesn't have due entries." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Activity Statement between" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Aging Report at" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"Aging details can be shown in the report, expressed in aging buckets " +"(30 days due, ...), so the customer can review how much is open, due or " +"overdue." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Amount" +msgstr "Valoare" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Balance Forward" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Cancel" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_company_id +msgid "Company" +msgstr "Companie" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_uid +msgid "Created by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_create_date +msgid "Created on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Current Due" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.act_window,name:customer_activity_statement.customer_activity_statement_wizard_action +msgid "Customer Activity Statement" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_customer_activity_statement_wizard +msgid "Customer Activity Statement Wizard" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date" +msgstr "Data" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_end +msgid "Date End" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_date_start +msgid "Date Start" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Date:" +msgstr "Data:" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Description" +msgstr "Descriere" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_display_name +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_display_name +msgid "Display Name" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_filter_partners_non_due +msgid "Don't show partners with no due entries" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Ending Balance" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "Export PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_id +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement_id +msgid "ID" +msgstr "ID" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_show_aging_buckets +msgid "Include Aging Buckets" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard___last_update +#: model:ir.model.fields,field_description:customer_activity_statement.field_report_customer_activity_statement_statement___last_update +msgid "Last Modified on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_write_date +msgid "Last Updated on" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model.fields,field_description:customer_activity_statement.field_customer_activity_statement_wizard_number_partner_ids +msgid "Number Partner" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Partner ref:" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "Reference number" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.actions.report,name:customer_activity_statement.action_print_customer_activity_statement +msgid "Statement Action to PDF" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "" +"The activity statement provides details of all activity on the " +"customer receivables between two selected dates. This includes all " +"invoices, refunds and payments. Any outstanding balance dated prior " +"to the chosen statement period will appear as a forward balance at " +"the top of the statement. The list is displayed in chronological " +"order and is split by currencies." +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "and" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.statement_document +msgid "in" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.ui.view,arch_db:customer_activity_statement.customer_activity_statement_wizard_view +msgid "or" +msgstr "" + +#. module: customer_activity_statement +#: model:ir.model,name:customer_activity_statement.model_report_customer_activity_statement_statement +msgid "report.customer_activity_statement.statement" +msgstr "" diff --git a/partner_statement/readme/CONFIGURE.rst b/partner_statement/readme/CONFIGURE.rst new file mode 100644 index 00000000..3242049d --- /dev/null +++ b/partner_statement/readme/CONFIGURE.rst @@ -0,0 +1,14 @@ + +Users willing to access to this report should have proper Accounting & Finance rights: + +#. Go to *Settings / Users* and edit your user to add the corresponding access rights as follows. +#. In *Application / Accounting & Finance*, select *Billing* or *Billing Manager* + +To configure this module, you need to: + +#. Go to *Configuration / Settings* +#. Under the *Followup Section* of *Accounting* option select either or both of OCA Activity or Outstanding Statement +#. Once selected, you may set default options for the reports. +#. Click *Save* + +Removing the wizard from menus follows the same process. diff --git a/partner_statement/readme/CONTRIBUTORS.rst b/partner_statement/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..1e2a70df --- /dev/null +++ b/partner_statement/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Miquel Raïch +* Graeme Gellatly diff --git a/partner_statement/readme/DESCRIPTION.rst b/partner_statement/readme/DESCRIPTION.rst new file mode 100644 index 00000000..169136b1 --- /dev/null +++ b/partner_statement/readme/DESCRIPTION.rst @@ -0,0 +1,13 @@ +This module extends the functionality of Invoicing to support the printing of customer and vendor statements. +There are two types of statements, Activity and Outstanding. Aging details can be shown in the reports, expressed in aging buckets, +so the customer or vendor can review how much is open, due or overdue. + +The activity statement provides details of all activity on the partner receivables or payables +between two selected dates. This includes all invoices, refunds and payments. +Any outstanding balance dated prior to the chosen statement period will appear +as a forward balance at the top of the statement. The list is displayed in chronological +order and is split by currencies. + +The outstanding statement provides details of all outstanding partner receivables or payables +up to a particular date. This includes all unpaid invoices, unclaimed refunds and +outstanding payments. The list is displayed in chronological order and is split by currencies. diff --git a/partner_statement/readme/HISTORY.rst b/partner_statement/readme/HISTORY.rst new file mode 100644 index 00000000..dee6c04a --- /dev/null +++ b/partner_statement/readme/HISTORY.rst @@ -0,0 +1,7 @@ +12.0.1.0.0 (2018-11-08) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [BREAKING] Modules customer_activity_statement and customer_outstanding_statement merged to create partner_statement. +* [ADD] New features. + * Age by months or days + * Filter negative balances diff --git a/partner_statement/readme/ROADMAP.rst b/partner_statement/readme/ROADMAP.rst new file mode 100644 index 00000000..6632eec0 --- /dev/null +++ b/partner_statement/readme/ROADMAP.rst @@ -0,0 +1,3 @@ +* Email template. +* Expose reports (using defaults) to billing users while restricting the wizard to managers option. +* Concept of statement run - to start an async job to send out all statements. diff --git a/partner_statement/readme/USAGE.rst b/partner_statement/readme/USAGE.rst new file mode 100644 index 00000000..0c0c0828 --- /dev/null +++ b/partner_statement/readme/USAGE.rst @@ -0,0 +1,6 @@ +To use this module, you need to: + +#. Go to Invoicing > Sales > Master Data > Customers or Invoicing > Purchases > Master Data > Vendors and select one or more +#. Press 'Action > Partner Activity Statement' or 'Action > Partner Outstanding Statement' respectively. +#. Indicate if you want to display receivables or payables, and if you want to display aging buckets and the aging type. +#. Optionally complete advanced options such as filtering non due or negative balance partners. diff --git a/partner_statement/report/__init__.py b/partner_statement/report/__init__.py new file mode 100644 index 00000000..d1df1e8a --- /dev/null +++ b/partner_statement/report/__init__.py @@ -0,0 +1,3 @@ +from . import report_statement_common +from . import activity_statement +from . import outstanding_statement diff --git a/partner_statement/report/activity_statement.py b/partner_statement/report/activity_statement.py new file mode 100644 index 00000000..7c627ef0 --- /dev/null +++ b/partner_statement/report/activity_statement.py @@ -0,0 +1,125 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, models +from collections import defaultdict + + +class ActivityStatement(models.AbstractModel): + """Model of Activity Statement""" + + _inherit = 'statement.common' + _name = 'report.partner_statement.activity_statement' + + def _initial_balance_sql_q1(self, partners, date_start, account_type): + return str(self._cr.mogrify(""" + SELECT l.partner_id, l.currency_id, l.company_id, + CASE WHEN l.currency_id is not null AND l.amount_currency > 0.0 + THEN sum(l.amount_currency) + ELSE sum(l.debit) + END as debit, + CASE WHEN l.currency_id is not null AND l.amount_currency < 0.0 + THEN sum(l.amount_currency * (-1)) + ELSE sum(l.credit) + END as credit + FROM account_move_line l + JOIN account_account_type at ON (at.id = l.user_type_id) + JOIN account_move m ON (l.move_id = m.id) + WHERE l.partner_id IN %(partners)s AND at.type = %(account_type)s + AND l.date < %(date_start)s AND not l.blocked + GROUP BY l.partner_id, l.currency_id, l.amount_currency, + l.company_id + """, locals()), "utf-8") + + def _initial_balance_sql_q2(self, company_id): + return str(self._cr.mogrify(""" + SELECT Q1.partner_id, debit-credit AS balance, + COALESCE(Q1.currency_id, c.currency_id) AS currency_id + FROM Q1 + JOIN res_company c ON (c.id = Q1.company_id) + WHERE c.id = %(company_id)s + """, locals()), "utf-8") + + def _get_account_initial_balance(self, company_id, partner_ids, + date_start, account_type): + balance_start = defaultdict(list) + partners = tuple(partner_ids) + # pylint: disable=E8103 + self.env.cr.execute("""WITH Q1 AS (%s), Q2 AS (%s) + SELECT partner_id, currency_id, balance + FROM Q2""" % (self._initial_balance_sql_q1(partners, date_start, + account_type), + self._initial_balance_sql_q2(company_id))) + for row in self.env.cr.dictfetchall(): + balance_start[row.pop('partner_id')].append(row) + return balance_start + + def _display_lines_sql_q1(self, partners, date_start, date_end, + account_type): + return str(self._cr.mogrify(""" + SELECT m.name AS move_id, l.partner_id, l.date, l.name, + l.ref, l.blocked, l.currency_id, l.company_id, + CASE WHEN (l.currency_id is not null AND l.amount_currency > 0.0) + THEN sum(l.amount_currency) + ELSE sum(l.debit) + END as debit, + CASE WHEN (l.currency_id is not null AND l.amount_currency < 0.0) + THEN sum(l.amount_currency * (-1)) + ELSE sum(l.credit) + END as credit, + CASE WHEN l.date_maturity is null + THEN l.date + ELSE l.date_maturity + END as date_maturity + FROM account_move_line l + JOIN account_account_type at ON (at.id = l.user_type_id) + JOIN account_move m ON (l.move_id = m.id) + WHERE l.partner_id IN %(partners)s + AND at.type = %(account_type)s + AND %(date_start)s <= l.date + AND l.date <= %(date_end)s + GROUP BY l.partner_id, m.name, l.date, l.date_maturity, l.name, + l.ref, l.blocked, l.currency_id, + l.amount_currency, l.company_id + """, locals()), "utf-8") + + def _display_lines_sql_q2(self, company_id): + return str(self._cr.mogrify(""" + SELECT Q1.partner_id, move_id, date, date_maturity, Q1.name, ref, + debit, credit, debit-credit as amount, blocked, + COALESCE(Q1.currency_id, c.currency_id) AS currency_id + FROM Q1 + JOIN res_company c ON (c.id = Q1.company_id) + WHERE c.id = %(company_id)s + """, locals()), "utf-8") + + def _get_account_display_lines(self, company_id, partner_ids, date_start, + date_end, account_type): + res = dict(map(lambda x: (x, []), partner_ids)) + partners = tuple(partner_ids) + + # pylint: disable=E8103 + self.env.cr.execute(""" + WITH Q1 AS (%s), + Q2 AS (%s) + SELECT partner_id, move_id, date, date_maturity, name, ref, debit, + credit, amount, blocked, currency_id + FROM Q2 + ORDER BY date, date_maturity, move_id""" % ( + self._display_lines_sql_q1(partners, date_start, date_end, + account_type), + self._display_lines_sql_q2(company_id))) + for row in self.env.cr.dictfetchall(): + res[row.pop('partner_id')].append(row) + return res + + @api.multi + def _get_report_values(self, docids, data): + if not data: + wiz = self.env["activity.statement.wizard"].with_context( + active_ids=docids, model="res.partner" + ) + data = wiz.create({})._prepare_statement() + data['amount_field'] = 'amount' + return super()._get_report_values(docids, data) diff --git a/partner_statement/report/outstanding_statement.py b/partner_statement/report/outstanding_statement.py new file mode 100644 index 00000000..9c6fab6d --- /dev/null +++ b/partner_statement/report/outstanding_statement.py @@ -0,0 +1,150 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class OutstandingStatement(models.AbstractModel): + """Model of Outstanding Statement""" + + _inherit = 'statement.common' + _name = 'report.partner_statement.outstanding_statement' + + def _display_lines_sql_q0(self, date_end): + return str( + self._cr.mogrify(""" + SELECT l1.id, + CASE WHEN l1.reconciled = TRUE and l1.balance > 0.0 + THEN max(pd.max_date) + WHEN l1.reconciled = TRUE and l1.balance < 0.0 + THEN max(pc.max_date) + ELSE null + END as reconciled_date + FROM account_move_line l1 + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.credit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pd ON pd.debit_move_id = l1.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.debit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pc ON pc.credit_move_id = l1.id + GROUP BY l1.id + """, locals() + ), + "utf-8" + ) + + def _display_lines_sql_q1(self, partners, date_end, account_type): + partners = tuple(partners) + return str(self._cr.mogrify(""" + SELECT m.name AS move_id, l.partner_id, l.date, l.name, + l.ref, l.blocked, l.currency_id, l.company_id, + CASE WHEN (l.currency_id is not null AND l.amount_currency > 0.0) + THEN avg(l.amount_currency) + ELSE avg(l.debit) + END as debit, + CASE WHEN (l.currency_id is not null AND l.amount_currency < 0.0) + THEN avg(l.amount_currency * (-1)) + ELSE avg(l.credit) + END as credit, + CASE WHEN l.balance > 0.0 + THEN l.balance - sum(coalesce(pd.amount, 0.0)) + ELSE l.balance + sum(coalesce(pc.amount, 0.0)) + END AS open_amount, + CASE WHEN l.balance > 0.0 + THEN l.amount_currency - sum(coalesce(pd.amount_currency, 0.0)) + ELSE l.amount_currency + sum(coalesce(pc.amount_currency, 0.0)) + END AS open_amount_currency, + CASE WHEN l.date_maturity is null + THEN l.date + ELSE l.date_maturity + END as date_maturity + FROM account_move_line l + JOIN account_account_type at ON (at.id = l.user_type_id) + JOIN account_move m ON (l.move_id = m.id) + LEFT JOIN Q0 ON Q0.id = l.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.credit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pd ON pd.debit_move_id = l.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.debit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pc ON pc.credit_move_id = l.id + WHERE l.partner_id IN %(partners)s AND at.type = %(account_type)s + AND (Q0.reconciled_date is null or + Q0.reconciled_date > %(date_end)s) + AND l.date <= %(date_end)s + GROUP BY l.partner_id, m.name, l.date, l.date_maturity, l.name, + l.ref, l.blocked, l.currency_id, + l.balance, l.amount_currency, l.company_id + """, locals()), "utf-8" + ) + + def _display_lines_sql_q2(self): + return str( + self._cr.mogrify(""" + SELECT partner_id, currency_id, move_id, date, date_maturity, + debit, credit, name, ref, blocked, company_id, + CASE WHEN currency_id is not null + THEN open_amount_currency + ELSE open_amount + END as open_amount + FROM Q1 + """, locals() + ), + "utf-8" + ) + + def _display_lines_sql_q3(self, company_id): + return str(self._cr.mogrify(""" + SELECT Q2.partner_id, move_id, date, date_maturity, Q2.name, ref, + debit, credit, debit-credit AS amount, blocked, + COALESCE(Q2.currency_id, c.currency_id) AS currency_id, open_amount + FROM Q2 + JOIN res_company c ON (c.id = Q2.company_id) + WHERE c.id = %(company_id)s + """, locals()), "utf-8" + ) + + def _get_account_display_lines(self, company_id, partner_ids, date_start, + date_end, account_type): + res = dict(map(lambda x: (x, []), partner_ids)) + partners = tuple(partner_ids) + # pylint: disable=E8103 + self.env.cr.execute(""" + WITH Q0 as (%s), + Q1 AS (%s), + Q2 AS (%s), + Q3 AS (%s) + SELECT partner_id, currency_id, move_id, date, date_maturity, debit, + credit, amount, open_amount, name, ref, blocked + FROM Q3 + ORDER BY date, date_maturity, move_id""" % ( + self._display_lines_sql_q0(date_end), + self._display_lines_sql_q1(partners, date_end, account_type), + self._display_lines_sql_q2(), + self._display_lines_sql_q3(company_id))) + for row in self.env.cr.dictfetchall(): + res[row.pop('partner_id')].append(row) + return res + + @api.multi + def _get_report_values(self, docids, data): + if not data: + wiz = self.env["outstanding.statement.wizard"].with_context( + active_ids=docids, model="res.partner" + ) + data = wiz.create({})._prepare_statement() + data['amount_field'] = 'open_amount' + return super()._get_report_values(docids, data) diff --git a/partner_statement/report/report_statement_common.py b/partner_statement/report/report_statement_common.py new file mode 100644 index 00000000..09889a6e --- /dev/null +++ b/partner_statement/report/report_statement_common.py @@ -0,0 +1,434 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from datetime import datetime, timedelta +from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT +from odoo import api, fields, models, _ + + +class ReportStatementCommon(models.AbstractModel): + """Abstract Report Statement for use in other models""" + + _name = 'statement.common' + _description = 'Statement Reports Common' + + def _format_date_to_partner_lang( + self, + date, + date_format=DEFAULT_SERVER_DATE_FORMAT + ): + if isinstance(date, str): + date = datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT) + return date.strftime(date_format) if date else '' + + def _get_account_display_lines(self, company_id, partner_ids, date_start, + date_end, account_type): + raise NotImplementedError + + def _get_account_initial_balance(self, company_id, partner_ids, + date_start, account_type): + return {} + + def _show_buckets_sql_q0(self, date_end): + return str(self._cr.mogrify(""" + SELECT l1.id, + CASE WHEN l1.reconciled = TRUE and l1.balance > 0.0 + THEN max(pd.max_date) + WHEN l1.reconciled = TRUE and l1.balance < 0.0 + THEN max(pc.max_date) + ELSE null + END as reconciled_date + FROM account_move_line l1 + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.credit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pd ON pd.debit_move_id = l1.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.debit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pc ON pc.credit_move_id = l1.id + GROUP BY l1.id + """, locals()), "utf-8") + + def _show_buckets_sql_q1(self, partners, date_end, account_type): + return str(self._cr.mogrify(""" + SELECT l.partner_id, l.currency_id, l.company_id, l.move_id, + CASE WHEN l.balance > 0.0 + THEN l.balance - sum(coalesce(pd.amount, 0.0)) + ELSE l.balance + sum(coalesce(pc.amount, 0.0)) + END AS open_due, + CASE WHEN l.balance > 0.0 + THEN l.amount_currency - sum(coalesce(pd.amount_currency, 0.0)) + ELSE l.amount_currency + sum(coalesce(pc.amount_currency, 0.0)) + END AS open_due_currency, + CASE WHEN l.date_maturity is null + THEN l.date + ELSE l.date_maturity + END as date_maturity + FROM account_move_line l + JOIN account_account_type at ON (at.id = l.user_type_id) + JOIN account_move m ON (l.move_id = m.id) + LEFT JOIN Q0 ON Q0.id = l.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.credit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pd ON pd.debit_move_id = l.id + LEFT JOIN (SELECT pr.* + FROM account_partial_reconcile pr + INNER JOIN account_move_line l2 + ON pr.debit_move_id = l2.id + WHERE l2.date <= %(date_end)s + ) as pc ON pc.credit_move_id = l.id + WHERE l.partner_id IN %(partners)s AND at.type = %(account_type)s + AND (Q0.reconciled_date is null or + Q0.reconciled_date > %(date_end)s) + AND l.date <= %(date_end)s AND not l.blocked + GROUP BY l.partner_id, l.currency_id, l.date, l.date_maturity, + l.amount_currency, l.balance, l.move_id, + l.company_id + """, locals()), "utf-8") + + def _show_buckets_sql_q2(self, date_end, minus_30, minus_60, minus_90, + minus_120): + return str(self._cr.mogrify(""" + SELECT partner_id, currency_id, date_maturity, open_due, + open_due_currency, move_id, company_id, + CASE + WHEN %(date_end)s <= date_maturity AND currency_id is null + THEN open_due + WHEN %(date_end)s <= date_maturity AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as current, + CASE + WHEN %(minus_30)s < date_maturity + AND date_maturity < %(date_end)s + AND currency_id is null + THEN open_due + WHEN %(minus_30)s < date_maturity + AND date_maturity < %(date_end)s + AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as b_1_30, + CASE + WHEN %(minus_60)s < date_maturity + AND date_maturity <= %(minus_30)s + AND currency_id is null + THEN open_due + WHEN %(minus_60)s < date_maturity + AND date_maturity <= %(minus_30)s + AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as b_30_60, + CASE + WHEN %(minus_90)s < date_maturity + AND date_maturity <= %(minus_60)s + AND currency_id is null + THEN open_due + WHEN %(minus_90)s < date_maturity + AND date_maturity <= %(minus_60)s + AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as b_60_90, + CASE + WHEN %(minus_120)s < date_maturity + AND date_maturity <= %(minus_90)s + AND currency_id is null + THEN open_due + WHEN %(minus_120)s < date_maturity + AND date_maturity <= %(minus_90)s + AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as b_90_120, + CASE + WHEN date_maturity <= %(minus_120)s + AND currency_id is null + THEN open_due + WHEN date_maturity <= %(minus_120)s + AND currency_id is not null + THEN open_due_currency + ELSE 0.0 + END as b_over_120 + FROM Q1 + GROUP BY partner_id, currency_id, date_maturity, open_due, + open_due_currency, move_id, company_id + """, locals()), "utf-8") + + def _show_buckets_sql_q3(self, company_id): + return str(self._cr.mogrify(""" + SELECT Q2.partner_id, current, b_1_30, b_30_60, b_60_90, b_90_120, + b_over_120, + COALESCE(Q2.currency_id, c.currency_id) AS currency_id + FROM Q2 + JOIN res_company c ON (c.id = Q2.company_id) + WHERE c.id = %(company_id)s + """, locals()), "utf-8") + + def _show_buckets_sql_q4(self): + return """ + SELECT partner_id, currency_id, sum(current) as current, + sum(b_1_30) as b_1_30, + sum(b_30_60) as b_30_60, + sum(b_60_90) as b_60_90, + sum(b_90_120) as b_90_120, + sum(b_over_120) as b_over_120 + FROM Q3 + GROUP BY partner_id, currency_id + """ + + def _get_bucket_dates(self, date_end, aging_type): + return getattr( + self, '_get_bucket_dates_%s' % aging_type, + self._get_bucket_dates_days + )(date_end) + + def _get_bucket_dates_days(self, date_end): + return { + 'date_end': date_end, + 'minus_30': date_end - timedelta(days=30), + 'minus_60': date_end - timedelta(days=60), + 'minus_90': date_end - timedelta(days=90), + 'minus_120': date_end - timedelta(days=120), + } + + def _get_bucket_dates_months(self, date_end): + res = {} + d = date_end + for k in ( + "date_end", + "minus_30", + "minus_60", + "minus_90", + "minus_120", + ): + res[k] = d + d = d.replace(day=1) - timedelta(days=1) + return res + + def _get_account_show_buckets(self, company_id, partner_ids, date_end, + account_type, aging_type): + buckets = dict(map(lambda x: (x, []), partner_ids)) + partners = tuple(partner_ids) + full_dates = self._get_bucket_dates(date_end, aging_type) + # pylint: disable=E8103 + # All input queries are properly escaped - false positive + self.env.cr.execute(""" + WITH Q0 AS (%s), + Q1 AS (%s), + Q2 AS (%s), + Q3 AS (%s), + Q4 AS (%s) + SELECT partner_id, currency_id, current, b_1_30, b_30_60, b_60_90, + b_90_120, b_over_120, + current+b_1_30+b_30_60+b_60_90+b_90_120+b_over_120 + AS balance + FROM Q4 + GROUP BY partner_id, currency_id, current, b_1_30, b_30_60, + b_60_90, b_90_120, b_over_120""" % ( + self._show_buckets_sql_q0(date_end), + self._show_buckets_sql_q1(partners, date_end, account_type), + self._show_buckets_sql_q2( + full_dates['date_end'], + full_dates['minus_30'], + full_dates['minus_60'], + full_dates['minus_90'], + full_dates['minus_120']), + self._show_buckets_sql_q3(company_id), + self._show_buckets_sql_q4())) + for row in self.env.cr.dictfetchall(): + buckets[row.pop('partner_id')].append(row) + return buckets + + def _get_bucket_labels(self, date_end, aging_type): + return getattr( + self, '_get_bucket_labels_%s' % aging_type, + self._get_bucket_dates_days + )(date_end) + + def _get_bucket_labels_days(self, date_end): + return [ + _('Current'), + _('1 - 30 Days'), + _('31 - 60 Days'), + _('61 - 90 Days'), + _('91 - 120 Days'), + _('121 Days +'), + _('Total'), + ] + + def _get_bucket_labels_months(self, date_end): + return [ + _('Current'), + _('1 Month'), + _('2 Months'), + _('3 Months'), + _('4 Months'), + _('Older'), + _('Total'), + ] + + def _get_line_currency_defaults(self, currency_id, currencies, + balance_forward): + if currency_id not in currencies: + # This will only happen if currency is inactive + currencies[currency_id] = ( + self.env['res.currency'].browse(currency_id) + ) + return ( + { + 'lines': [], + 'buckets': [], + 'balance_forward': balance_forward, + 'amount_due': balance_forward, + }, + currencies + ) + + @api.multi + def _get_report_values(self, docids, data): + """ + @return: returns a dict of parameters to pass to qweb report. + the most important pair is {'data': res} which contains all + the data for each partner. It is structured like: + {partner_id: { + 'start': date string, + 'end': date_string, + 'today': date_string + 'currencies': { + currency_id: { + 'lines': [{'date': date string, ...}, ...], + 'balance_forward': float, + 'amount_due': float, + 'buckets': { + 'p1': float, 'p2': ... + } + } + } + } + """ + company_id = data['company_id'] + partner_ids = data['partner_ids'] + date_start = data.get('date_start') + if date_start and isinstance(date_start, str): + date_start = datetime.strptime( + date_start, DEFAULT_SERVER_DATE_FORMAT + ).date() + date_end = data['date_end'] + if isinstance(date_end, str): + date_end = datetime.strptime( + date_end, DEFAULT_SERVER_DATE_FORMAT + ).date() + account_type = data['account_type'] + aging_type = data['aging_type'] + today = fields.Date.today() + amount_field = data.get('amount_field', 'amount') + + # There should be relatively few of these, so to speed performance + # we cache them + self._cr.execute(""" + SELECT p.id, l.date_format + FROM res_partner p LEFT JOIN res_lang l ON p.lang=l.code + WHERE p.id IN %(partner_ids)s + """, {"partner_ids": tuple(partner_ids)}) + date_formats = {r[0]: r[1] for r in self._cr.fetchall()} + currencies = {x.id: x for x in self.env['res.currency'].search([])} + + res = {} + # get base data + lines = self._get_account_display_lines( + company_id, partner_ids, date_start, date_end, account_type) + balances_forward = self._get_account_initial_balance( + company_id, partner_ids, date_start, account_type) + + if data['show_aging_buckets']: + buckets = self._get_account_show_buckets( + company_id, partner_ids, date_end, account_type, aging_type) + bucket_labels = self._get_bucket_labels(date_end, aging_type) + else: + bucket_labels = {} + + # organise and format for report + format_date = self._format_date_to_partner_lang + partners_to_remove = set() + for partner_id in partner_ids: + res[partner_id] = { + 'today': format_date(today, date_formats[partner_id]), + 'start': format_date(date_start, date_formats[partner_id]), + 'end': format_date(date_end, date_formats[partner_id]), + 'currencies': {}, + } + currency_dict = res[partner_id]['currencies'] + + for line in balances_forward.get(partner_id, []): + currency_dict[line['currency_id']], currencies = ( + self._get_line_currency_defaults( + line['currency_id'], currencies, line['balance']) + ) + + for line in lines[partner_id]: + if line['currency_id'] not in currency_dict: + currency_dict[line['currency_id']], currencies = ( + self._get_line_currency_defaults( + line['currency_id'], currencies, 0.0) + ) + line_currency = currency_dict[line['currency_id']] + if not line['blocked']: + line_currency['amount_due'] += line[amount_field] + line['balance'] = line_currency['amount_due'] + line['date'] = format_date( + line['date'], date_formats[partner_id] + ) + line['date_maturity'] = format_date( + line['date_maturity'], date_formats[partner_id] + ) + line_currency['lines'].append(line) + + if data['show_aging_buckets']: + for line in buckets[partner_id]: + if line['currency_id'] not in currency_dict: + currency_dict[line['currency_id']], currencies = ( + self._get_line_currency_defaults( + line['currency_id'], currencies, 0.0) + ) + line_currency = currency_dict[line['currency_id']] + line_currency['buckets'] = line + + if len(partner_ids) > 1: + values = currency_dict.values() + if not any( + [v['lines'] or v['balance_forward'] for v in values] + ): + if data["filter_non_due_partners"]: + partners_to_remove.add(partner_id) + continue + else: + res[partner_id]['no_entries'] = True + if data["filter_negative_balances"]: + if not all([v['amount_due'] >= 0.0 for v in values]): + partners_to_remove.add(partner_id) + + for partner in partners_to_remove: + del res[partner] + partner_ids.remove(partner) + + return { + 'doc_ids': partner_ids, + 'doc_model': 'res.partner', + 'docs': self.env['res.partner'].browse(partner_ids), + 'data': res, + 'company': self.env['res.company'].browse(company_id), + 'Currencies': currencies, + 'account_type': account_type, + 'bucket_labels': bucket_labels, + } diff --git a/partner_statement/security/statement_security.xml b/partner_statement/security/statement_security.xml new file mode 100644 index 00000000..b04edfcf --- /dev/null +++ b/partner_statement/security/statement_security.xml @@ -0,0 +1,14 @@ + + + + + Use activity statements + + + + + Use outstanding statements + + + + diff --git a/partner_statement/static/description/icon.png b/partner_statement/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/partner_statement/static/description/icon.png differ diff --git a/partner_statement/static/src/scss/layout_statement.scss b/partner_statement/static/src/scss/layout_statement.scss new file mode 100644 index 00000000..80cd8edc --- /dev/null +++ b/partner_statement/static/src/scss/layout_statement.scss @@ -0,0 +1,22 @@ +.table-statement { + .amount { + text-align: right !important; + width: 14% //spread 7 columns evenly + } + thead { + border-bottom: solid; // required for clean layout + tr th:first-child { + width: auto !important; // required for clean layout + } + tr th:last-child { + width: 16% !important; // required for boxed layout + } + } +} + +.statement-blocked { + background-color: $gray-500 !important; + td:last-child { + background-color: $gray-500 !important; + } +} diff --git a/partner_statement/tests/__init__.py b/partner_statement/tests/__init__.py new file mode 100644 index 00000000..6395f9e7 --- /dev/null +++ b/partner_statement/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_activity_statement +from . import test_outstanding_statement +from . import test_res_config_settings diff --git a/partner_statement/tests/test_activity_statement.py b/partner_statement/tests/test_activity_statement.py new file mode 100644 index 00000000..56813906 --- /dev/null +++ b/partner_statement/tests/test_activity_statement.py @@ -0,0 +1,111 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from datetime import date +from odoo.tests.common import TransactionCase +from odoo import fields + + +class TestActivityStatement(TransactionCase): + """ + Tests for Activity Statement. + """ + def setUp(self): + super().setUp() + + self.res_users_model = self.env['res.users'] + self.company = self.env.ref('base.main_company') + self.partner1 = self.env.ref('base.res_partner_1') + self.partner2 = self.env.ref('base.res_partner_2') + self.g_account_user = self.env.ref('account.group_account_user') + + self.user = self._create_user('user_1', [self.g_account_user], + self.company).id + + self.statement_model = \ + self.env['report.partner_statement.activity_statement'] + self.wiz = self.env['activity.statement.wizard'] + self.report_name = 'partner_statement.activity_statement' + self.report_title = 'Activity Statement' + self.today = fields.Date.context_today(self.wiz) + + def _create_user(self, login, groups, company): + group_ids = [group.id for group in groups] + user = self.res_users_model.create({ + 'name': login, + 'login': login, + 'password': 'demo', + 'email': 'example@yourcompany.com', + 'company_id': company.id, + 'company_ids': [(4, company.id)], + 'groups_id': [(6, 0, group_ids)] + }) + return user + + def test_customer_activity_statement(self): + + wiz_id = self.wiz.with_context( + active_ids=[self.partner1.id, self.partner2.id], + ).create({}) + + wiz_id.aging_type = 'months' + wiz_id.show_aging_buckets = False + + statement = wiz_id.button_export_pdf() + + self.assertDictContainsSubset( + { + 'type': 'ir.actions.report', + 'report_name': self.report_name, + 'report_type': 'qweb-pdf', + }, + statement, + 'There was an error and the PDF report was not generated.' + ) + + data = wiz_id._prepare_statement() + docids = data['partner_ids'] + report = self.statement_model._get_report_values(docids, data) + self.assertIsInstance(report, dict, + "There was an error while compiling the report.") + self.assertIn("bucket_labels", report, + "There was an error while compiling the report.") + + def test_customer_activity_report_no_wizard(self): + docids = [self.partner1.id, self.partner2.id] + report = self.statement_model._get_report_values(docids, False) + self.assertIsInstance(report, dict, + "There was an error while compiling the report.") + self.assertIn("bucket_labels", report, + "There was an error while compiling the report.") + + def test_date_formatting(self): + date_fmt = '%d/%m/%Y' + test_date = date(2018, 9, 30) + res = self.statement_model._format_date_to_partner_lang( + test_date, date_fmt + ) + self.assertEqual(res, '30/09/2018') + + test_date_string = '2018-09-30' + res = self.statement_model._format_date_to_partner_lang( + test_date_string, date_fmt + ) + self.assertEqual(res, '30/09/2018') + + def test_onchange_aging_type(self): + """Test that partner data is filled accodingly""" + wiz_id = self.wiz.with_context( + active_ids=[self.partner1.id, self.partner2.id], + ).new() + wiz_id.aging_type = 'months' + wiz_id.onchange_aging_type() + self.assertEqual(wiz_id.date_end.month, wiz_id.date_start.month) + self.assertTrue(wiz_id.date_end.day > wiz_id.date_start.day) + self.assertTrue(wiz_id.date_end < self.today) + + wiz_id.aging_type = 'days' + wiz_id.onchange_aging_type() + self.assertEqual((wiz_id.date_end - wiz_id.date_start).days, 30) + self.assertTrue(wiz_id.date_end == self.today) diff --git a/partner_statement/tests/test_outstanding_statement.py b/partner_statement/tests/test_outstanding_statement.py new file mode 100644 index 00000000..9d24ba19 --- /dev/null +++ b/partner_statement/tests/test_outstanding_statement.py @@ -0,0 +1,77 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class TestOutstandingStatement(TransactionCase): + """ + Tests for Outstanding Statement. + """ + def setUp(self): + super().setUp() + + self.res_users_model = self.env['res.users'] + self.company = self.env.ref('base.main_company') + self.partner1 = self.env.ref('base.res_partner_2') + self.partner2 = self.env.ref('base.res_partner_3') + self.g_account_user = self.env.ref('account.group_account_user') + + self.user = self._create_user('user_1', [self.g_account_user], + self.company).id + + self.statement_model = \ + self.env['report.partner_statement.outstanding_statement'] + self.wiz = self.env['outstanding.statement.wizard'] + self.report_name = 'partner_statement.outstanding_statement' + self.report_title = 'Outstanding Statement' + + def _create_user(self, login, groups, company): + group_ids = [group.id for group in groups] + user = self.res_users_model.create({ + 'name': login, + 'login': login, + 'password': 'demo', + 'email': 'example@yourcompany.com', + 'company_id': company.id, + 'company_ids': [(4, company.id)], + 'groups_id': [(6, 0, group_ids)] + }) + return user + + def test_customer_outstanding_statement(self): + + wiz_id = self.wiz.with_context( + active_ids=[self.partner1.id, self.partner2.id], + ).create({}) + wiz_id.aging_type = 'months' + + statement = wiz_id.button_export_pdf() + + self.assertDictContainsSubset( + { + 'type': 'ir.actions.report', + 'report_name': self.report_name, + 'report_type': 'qweb-pdf', + }, + statement, + 'There was an error and the PDF report was not generated.' + ) + + data = wiz_id._prepare_statement() + docids = data['partner_ids'] + report = self.statement_model._get_report_values(docids, data) + self.assertIsInstance(report, + dict, + "There was an error while compiling the report.") + self.assertIn("bucket_labels", report, + "There was an error while compiling the report.") + + def test_customer_outstanding_report_no_wizard(self): + docids = [self.partner1.id] + report = self.statement_model._get_report_values(docids, False) + self.assertIsInstance(report, dict, + "There was an error while compiling the report.") + self.assertIn("bucket_labels", report, + "There was an error while compiling the report.") diff --git a/partner_statement/tests/test_res_config_settings.py b/partner_statement/tests/test_res_config_settings.py new file mode 100644 index 00000000..c9a1f317 --- /dev/null +++ b/partner_statement/tests/test_res_config_settings.py @@ -0,0 +1,36 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class TestResConfigSettings(TransactionCase): + + def setUp(self): + super().setUp() + self.config = self.env['res.config.settings'] + self.cr.execute( + "SELECT uid FROM res_groups_users_rel " + "WHERE gid IN (SELECT res_id FROM ir_model_data " + " WHERE module='account' AND name='group_account_invoice') " + "ORDER BY uid DESC LIMIT 1" + ) + self.account_user = self.cr.fetchone()[0] + self.user_obj = self.env['res.users'].sudo(self.account_user) + + def test_groups(self): + conf = self.config.create({ + "default_aging_type": "months", + "group_activity_statement": True, + "group_outstanding_statement": False, + }) + conf.set_values() + self.assertFalse(self.user_obj._has_group( + 'partner_statement.group_outstanding_statement') + ) + self.assertTrue(self.user_obj._has_group( + 'partner_statement.group_activity_statement') + ) + res = self.env['ir.default'].get( + 'activity.statement.wizard', 'aging_type' + ) + self.assertEquals(res, 'months') diff --git a/partner_statement/views/activity_statement.xml b/partner_statement/views/activity_statement.xml new file mode 100644 index 00000000..07d8e377 --- /dev/null +++ b/partner_statement/views/activity_statement.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + diff --git a/partner_statement/views/aging_buckets.xml b/partner_statement/views/aging_buckets.xml new file mode 100644 index 00000000..ce8c2687 --- /dev/null +++ b/partner_statement/views/aging_buckets.xml @@ -0,0 +1,49 @@ + + + + + + + diff --git a/partner_statement/views/assets.xml b/partner_statement/views/assets.xml new file mode 100644 index 00000000..118d979e --- /dev/null +++ b/partner_statement/views/assets.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/partner_statement/views/outstanding_statement.xml b/partner_statement/views/outstanding_statement.xml new file mode 100644 index 00000000..bd6a28d2 --- /dev/null +++ b/partner_statement/views/outstanding_statement.xml @@ -0,0 +1,126 @@ + + + + + + + + + + diff --git a/partner_statement/views/res_config_settings.xml b/partner_statement/views/res_config_settings.xml new file mode 100644 index 00000000..60794fd0 --- /dev/null +++ b/partner_statement/views/res_config_settings.xml @@ -0,0 +1,59 @@ + + + + + res.config.settings.view.form (in partner_statement) + res.config.settings + + + + +
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
diff --git a/partner_statement/wizard/__init__.py b/partner_statement/wizard/__init__.py new file mode 100644 index 00000000..984e2b53 --- /dev/null +++ b/partner_statement/wizard/__init__.py @@ -0,0 +1,4 @@ +from . import statement_common +from . import activity_statement_wizard +from . import outstanding_statement_wizard +from . import res_config_settings diff --git a/partner_statement/wizard/activity_statement_wizard.py b/partner_statement/wizard/activity_statement_wizard.py new file mode 100644 index 00000000..830d82e7 --- /dev/null +++ b/partner_statement/wizard/activity_statement_wizard.py @@ -0,0 +1,44 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from dateutil.relativedelta import relativedelta +from odoo import api, fields, models + + +class ActivityStatementWizard(models.TransientModel): + """Activity Statement wizard.""" + + _inherit = 'statement.common.wizard' + _name = 'activity.statement.wizard' + _description = 'Activity Statement Wizard' + + @api.model + def _get_date_start(self): + return ( + fields.Date.context_today(self).replace(day=1) - + relativedelta(days=1) + ).replace(day=1) + + date_start = fields.Date(required=True, default=_get_date_start) + + @api.onchange('aging_type') + def onchange_aging_type(self): + super().onchange_aging_type() + if self.aging_type == 'months': + self.date_start = self.date_end.replace(day=1) + else: + self.date_start = self.date_end - relativedelta(days=30) + + def _export(self): + """Export to PDF.""" + data = self._prepare_statement() + return self.env.ref( + 'partner_statement' + '.action_print_activity_statement').report_action( + self, data=data) + + def _prepare_statement(self): + res = super()._prepare_statement() + res.update({'date_start': self.date_start}) + return res diff --git a/partner_statement/wizard/outstanding_statement_wizard.py b/partner_statement/wizard/outstanding_statement_wizard.py new file mode 100644 index 00000000..92b76ce8 --- /dev/null +++ b/partner_statement/wizard/outstanding_statement_wizard.py @@ -0,0 +1,21 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import models + + +class OutstandingStatementWizard(models.TransientModel): + """Outstanding Statement wizard.""" + + _name = 'outstanding.statement.wizard' + _inherit = 'statement.common.wizard' + _description = 'Outstanding Statement Wizard' + + def _export(self): + """Export to PDF.""" + data = self._prepare_statement() + return self.env.ref( + 'partner_statement' + '.action_print_outstanding_statement').report_action( + self, data=data) diff --git a/partner_statement/wizard/res_config_settings.py b/partner_statement/wizard/res_config_settings.py new file mode 100644 index 00000000..fe261503 --- /dev/null +++ b/partner_statement/wizard/res_config_settings.py @@ -0,0 +1,57 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + group_activity_statement = fields.Boolean( + "Enable OCA Activity Statements", + group='account.group_account_invoice', + implied_group='partner_statement.group_activity_statement', + ) + + default_aging_type = fields.Selection( + [("days", "Age by Days"), ("months", "Age by Months")], + string="Aging Method", + required=True, + default_model="statement.common.wizard", + ) + + default_show_aging_buckets = fields.Boolean( + string="Show Aging Buckets", + default_model="statement.common.wizard", + ) + + default_filter_partners_non_due = fields.Boolean( + string='Exclude partners with no due entries', + default_model="statement.common.wizard", + ) + + default_filter_negative_balances = fields.Boolean( + "Exclude Negative Balances", + default_model="statement.common.wizard", + ) + + group_outstanding_statement = fields.Boolean( + "Enable OCA Outstanding Statements", + group='account.group_account_invoice', + implied_group='partner_statement.group_outstanding_statement', + ) + + def set_values(self): + self = self.with_context(active_test=False) + # default values fields + IrDefault = self.env['ir.default'].sudo() + for name, field in self._fields.items(): + if (name.startswith("default_") and + field.default_model == 'statement.common.wizard'): + if isinstance(self[name], models.BaseModel): + if self._fields[name].type == 'many2one': + value = self[name].id + else: + value = self[name].ids + else: + value = self[name] + IrDefault.set('activity.statement.wizard', name[8:], value) + IrDefault.set('outstanding.statement.wizard', name[8:], value) + return super().set_values() diff --git a/partner_statement/wizard/statement_common.py b/partner_statement/wizard/statement_common.py new file mode 100644 index 00000000..ac01f816 --- /dev/null +++ b/partner_statement/wizard/statement_common.py @@ -0,0 +1,70 @@ +# Copyright 2018 Graeme Gellatly +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from dateutil.relativedelta import relativedelta +from odoo import api, fields, models + + +class StatementCommon(models.AbstractModel): + + _name = 'statement.common.wizard' + _description = 'Statement Reports Common Wizard' + + name = fields.Char() + company_id = fields.Many2one( + comodel_name='res.company', + default=lambda self: self.env.user.company_id, + string='Company' + ) + date_end = fields.Date(required=True, default=fields.Date.context_today) + show_aging_buckets = fields.Boolean(default=True) + number_partner_ids = fields.Integer( + default=lambda self: len(self._context['active_ids']) + ) + filter_partners_non_due = fields.Boolean( + string='Don\'t show partners with no due entries', default=True) + filter_negative_balances = fields.Boolean( + "Exclude Negative Balances", default=True + ) + + aging_type = fields.Selection( + [("days", "Age by Days"), ("months", "Age by Months")], + string="Aging Method", + default="days", + required=True, + ) + + account_type = fields.Selection( + [('receivable', 'Receivable'), + ('payable', 'Payable')], string='Account type', default='receivable') + + @api.onchange('aging_type') + def onchange_aging_type(self): + if self.aging_type == 'months': + self.date_end = ( + fields.Date.context_today(self).replace(day=1) - + relativedelta(days=1) + ) + else: + self.date_end = fields.Date.context_today(self) + + @api.multi + def button_export_pdf(self): + self.ensure_one() + return self._export() + + def _prepare_statement(self): + self.ensure_one() + return { + 'date_end': self.date_end, + 'company_id': self.company_id.id, + 'partner_ids': self._context['active_ids'], + 'show_aging_buckets': self.show_aging_buckets, + 'filter_non_due_partners': self.filter_partners_non_due, + 'account_type': self.account_type, + 'aging_type': self.aging_type, + 'filter_negative_balances': self.filter_negative_balances, + } + + def _export(self): + raise NotImplementedError diff --git a/partner_statement/wizard/statement_wizard.xml b/partner_statement/wizard/statement_wizard.xml new file mode 100644 index 00000000..6513cc34 --- /dev/null +++ b/partner_statement/wizard/statement_wizard.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + Statement Common Wizard View + statement.common.wizard + +
+
+

+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + Outstanding Statement Wizard + outstanding.statement.wizard + + primary + + + + + + + + + Activity Statement Wizard + activity.statement.wizard + + primary + + + + + + + + + + +