-
79customer_outstanding_statement/README.rst
-
22customer_outstanding_statement/__manifest__.py
-
244customer_outstanding_statement/i18n/ca.po
-
253customer_outstanding_statement/i18n/customer_outstanding_statement.pot
-
254customer_outstanding_statement/i18n/de.po
-
254customer_outstanding_statement/i18n/es.po
-
254customer_outstanding_statement/i18n/fr.po
-
247customer_outstanding_statement/i18n/hr_HR.po
-
245customer_outstanding_statement/i18n/it.po
-
244customer_outstanding_statement/i18n/nl.po
-
246customer_outstanding_statement/i18n/nl_NL.po
-
246customer_outstanding_statement/i18n/pt.po
-
245customer_outstanding_statement/i18n/ro.po
-
3customer_outstanding_statement/report/__init__.py
-
190customer_outstanding_statement/report/customer_outstanding_statement.py
-
BINcustomer_outstanding_statement/static/description/Outstanding_Statement.png
-
76customer_outstanding_statement/static/description/index.html
-
3customer_outstanding_statement/tests/__init__.py
-
212customer_outstanding_statement/views/statement.xml
-
3customer_outstanding_statement/wizard/__init__.py
-
54customer_outstanding_statement/wizard/customer_outstanding_statement_wizard.xml
-
81customer_statement/README.rst
-
6customer_statement/__init__.py
-
13customer_statement/demo/account_payment_term.xml
-
1customer_statement/models/__init__.py
-
18customer_statement/models/account_payment_term.py
-
3customer_statement/report/__init__.py
-
207customer_statement/report/customer_activity_statement.py
-
368customer_statement/report/statement_common.py
-
BINcustomer_statement/static/description/Activity_Statement.png
-
BINcustomer_statement/static/description/icon.png
-
78customer_statement/static/description/index.html
-
3customer_statement/tests/__init__.py
-
67customer_statement/tests/test_customer_activity_statement.py
-
34customer_statement/views/account_payment_term.xml
-
171customer_statement/views/statement.xml
-
3customer_statement/wizard/__init__.py
-
38customer_statement/wizard/customer_activity_statement_wizard.py
-
56customer_statement/wizard/customer_activity_statement_wizard.xml
-
27customer_statement/wizard/customer_outstanding_statement_wizard.py
-
47customer_statement/wizard/statement_common.py
-
132partner_statement/README.rst
-
0partner_statement/__init__.py
-
16partner_statement/__manifest__.py
-
0partner_statement/i18n/ca.po
-
0partner_statement/i18n/de.po
-
0partner_statement/i18n/es.po
-
0partner_statement/i18n/fr.po
-
0partner_statement/i18n/hr_HR.po
-
0partner_statement/i18n/it.po
-
0partner_statement/i18n/nl.po
-
0partner_statement/i18n/nl_NL.po
-
0partner_statement/i18n/partner_statement.pot
-
0partner_statement/i18n/pt.po
-
0partner_statement/i18n/ro.po
-
14partner_statement/readme/CONFIGURE.rst
-
2partner_statement/readme/CONTRIBUTORS.rst
-
13partner_statement/readme/DESCRIPTION.rst
-
7partner_statement/readme/HISTORY.rst
-
3partner_statement/readme/ROADMAP.rst
-
6partner_statement/readme/USAGE.rst
-
3partner_statement/report/__init__.py
-
125partner_statement/report/activity_statement.py
-
150partner_statement/report/outstanding_statement.py
-
434partner_statement/report/report_statement_common.py
-
14partner_statement/security/statement_security.xml
-
0partner_statement/static/description/icon.png
-
4partner_statement/static/src/scss/layout_statement.scss
-
3partner_statement/tests/__init__.py
-
111partner_statement/tests/test_activity_statement.py
-
29partner_statement/tests/test_outstanding_statement.py
-
36partner_statement/tests/test_res_config_settings.py
-
130partner_statement/views/activity_statement.xml
-
49partner_statement/views/aging_buckets.xml
-
12partner_statement/views/assets.xml
-
126partner_statement/views/outstanding_statement.xml
-
59partner_statement/views/res_config_settings.xml
-
4partner_statement/wizard/__init__.py
-
44partner_statement/wizard/activity_statement_wizard.py
-
21partner_statement/wizard/outstanding_statement_wizard.py
-
57partner_statement/wizard/res_config_settings.py
-
70partner_statement/wizard/statement_common.py
-
101partner_statement/wizard/statement_wizard.xml
@ -1,79 +0,0 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
==================================== |
|||
Print Partner Outstanding Statement |
|||
==================================== |
|||
|
|||
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. |
|||
|
|||
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. |
|||
|
|||
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* |
|||
#. In *Technical Settings* mark *Show Full Accounting Features* options. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
To use this module, you need to: |
|||
|
|||
#. Go to Invoicing > Sales > Master Data > Customers or or Invoicing > Purchases > Master Data > Vendors and select one or more |
|||
#. Press 'Action > Partner Outstanding Statement' |
|||
#. Indicate if you want to display receivables or payables, and if you want to display aging buckets |
|||
|
|||
|
|||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas |
|||
:alt: Try me on Runbot |
|||
:target: https://runbot.odoo-community.org/runbot/91/11.0 |
|||
|
|||
Roadmap |
|||
======= |
|||
|
|||
* In v12, the module should be renamed to `Partner Outstanding Statement`. |
|||
Maybe merge this module with the `Partner Activity Statement` module. |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues |
|||
<https://github.com/OCA/account-financial-reporting/issues>`_. In case of trouble, |
|||
please check there if your issue has already been reported. If you spotted it |
|||
first, help us smash it by providing detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Images |
|||
------ |
|||
|
|||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.png>`_. |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Miquel Raïch <miquel.raich@eficent.com> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
To contribute to this module, please visit https://odoo-community.org. |
@ -1,22 +0,0 @@ |
|||
# 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 Outstanding Statement', |
|||
'version': '11.0.2.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_invoicing', |
|||
], |
|||
'data': [ |
|||
'views/statement.xml', |
|||
'wizard/customer_outstanding_statement_wizard.xml', |
|||
], |
|||
'installable': True, |
|||
'application': False, |
|||
} |
@ -1,244 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 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 <mtbochaca@gmail.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Balanç " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Cancel·lar " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Empresa " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Creat per " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Creat a " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Nom a mostrar " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Última modificació a " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Última actualització per " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Última actualització a " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "o" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,253 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+ Customer Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+ Supplier Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_account_type |
|||
msgid "Account type" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Partner Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: selection:customer.outstanding.statement.wizard,account_type:0 |
|||
msgid "Payable" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: selection:customer.outstanding.statement.wizard,account_type:0 |
|||
msgid "Receivable" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "The outstanding statement provides details of all partner's outstanding receivables and 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
|||
|
@ -1,254 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2018 |
|||
# Rudolf Schnapka <rs@techno-flex.de>, 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-24 13:24+0000\n" |
|||
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>\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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "+120 Tage fällig" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "1-30 Tage fällig" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "30-60 Tage fällig" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "90-120 Tage fällig" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "<strong>Der Partner hat keine offenen Posten.</strong>" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "Fälligkeiten Bericht zu" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Saldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "Fälliger Saldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Abbrechen" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Unternehmen" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Angelegt von" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Angelegt am" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "Aktuell fällig" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "Kunden-Offene Posten-Bericht" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "Assistent zum Kunden-Offene Posten-Bericht" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Datum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "Enddatum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "Datum:" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "Beschreibung" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Anzeigename" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "Fälligkeitsdatum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "Endsaldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Export PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "Schliesse Altersgruppen ein" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Zuletzt geändert am" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Zuletzt aktualisiert durch" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Zuletzt aktualisiert am" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "Nummeriere Partner" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "Offene Summe" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "Ursprüngliche Summe" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "Offene Posten-Bericht" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "Offene Posten zum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "Partner-Ref.:" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "Referenznummer" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "Berichtsaktion zu PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
"Der offene Posten-Bericht gibt Auskunft über alle offenen Kundenforderungen " |
|||
"bis zu einem bestimmten Datum. Dazu gehören alle unbezahlten Rechnungen, " |
|||
"nicht eingeforderte Rückerstattungen und ausstehende Zahlungen. Die Liste " |
|||
"wird in chronologischer Reihenfolge angezeigt und ist nach Währungen " |
|||
"gegliedert." |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "in" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "oder" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "report.customer_outstanding_statement.statement" |
@ -1,254 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2017 |
|||
# Gelo Joga Landoo <gj@landoo.es>, 2017 |
|||
# Pedro M. Baeza <pedro.baeza@gmail.com>, 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 <jordi.ballester@eficent.com>\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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "+120 Días" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "1-30 Días" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "30-60 Días" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "60-90 Días" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "90-120 Días" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "<strong>Este cliente no tiene pagos pendientes</strong>" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "Reporte de vencidos al" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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 "" |
|||
"Detalles de vencidos pueden ser mostrados en el reporte, expresados en " |
|||
"rangos……de mora (30 días, …), para que el cliente pueda revisar cuando está " |
|||
"abierto, cuando debe y cuańto está vencido." |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Cuota" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "Saldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Cancelar" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Compañía" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Creado por" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Creado en" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "Saldo a la Fecha" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "Informe de Saldos Abiertos" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "Asistente de Informe de Saldos Abiertos" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Fecha" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "Fecha Fin" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "Fecha:" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "Descripción" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Nombre a mostrar" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "No mostrar clientes sin saldo pendiente" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "Fecha de Pago" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "Saldo Final" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Exportar a PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "Inluir Períodos de Mora" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Última modificación en" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Última modificación por" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Última actualización en" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "Número de Cliente" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "Saldo Abierto" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "Saldo Original" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "Estado de Cuenta" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "Estado de Cuenta al" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "Ref. de Cliente:" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "Número de Referencia" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "Acción Estado a PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
"El estado de cuenta proporciona detalles de todas las cuentas por cobrar " |
|||
"pendientes…… de clientes hasta una fecha determinada. Esto incluye todas las " |
|||
"facturas no pagadas, reembolsos…… no reclamados y pagos pendientes. La lista " |
|||
"se muestra en orden cronológico y se divide por monedas." |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "en" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "o" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "informe.estado_de_cuenta_de_cliente" |
@ -1,254 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2018 |
|||
# Quentin THEURET <odoo@kerpeo.com>, 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 <svalaeys@fiefmanage.ch>\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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "+120 jours d'arriérés" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "1-30 jours d'arriérés" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "30-60 jours d'arriérés" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "60-90 jours d'arriérés" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "90-120 jours d'arriérés" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
"<strong>Le partenaire n'a pas d'écriture en attente de paiement.</strong>" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "Balance âgée au" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Solde" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "Solde dû" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Annuler" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Société" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Créé par" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Créé le" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "Dû en ce moment" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "Postes ouverts des partenaires" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "Assistant pour l'édition des postes ouverts" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Date" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "Jusqu'au" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "Date :" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "Description" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Nom affiché" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "Masquer les partenaires sans solde" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "Date d'échéance" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "Solde final" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Export PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "Afficher les arriérés par tranche" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Dernière modification le" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Dernière mise à jour par" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Dernière mise à jour le" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "Numéro du partenaire" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "Solde ouvert" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "Montant original" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "Relevé des postes ouverts" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "Relevé des postes ouverts au" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "Ref. partenaire :" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "Numéro de référence" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "Export du relevé des postes ouverts en PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
"Le relevé des postes ouverts détaille tous les montants dû à une date " |
|||
"donnée. Ceci inclus toutes les factures non payées, remboursements non " |
|||
"effectués et paiements en attente. Les transactions sont affichées par ordre " |
|||
"chronologique et ventillées par devise." |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "en" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "ou" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "report.customer_outstanding_statement.statement" |
@ -1,247 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Bole <bole@dajmi5.com>, 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 <bole@dajmi5.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Saldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Otkaži" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Tvrtka" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Kreirao" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Kreirano" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Datum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
#, fuzzy |
|||
msgid "Date End" |
|||
msgstr "Datum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Naziv " |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Izvoz PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "ili" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,245 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Stefano <stefano.sforzi@agilebg.com>, 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 <stefano.sforzi@agilebg.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Cancellare" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Azienda" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Data" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
#, fuzzy |
|||
msgid "Date End" |
|||
msgstr "Data" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Nome mostrato" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "o" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,244 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Melroy van den Berg <webmaster1989@gmail.com>, 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 <webmaster1989@gmail.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Balans" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Annuleren" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Bedrijf" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Gecreëerd door" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Gecreëerd op" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Weergavenaam" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Laatst Gewijzigd op" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Laatst Geüpdatet door" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Laatst Geüpdatet op" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "of" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,246 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Peter Hageman <hageman.p@gmail.com>, 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 <hageman.p@gmail.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Annuleer" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Bedrijf" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Datum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
#, fuzzy |
|||
msgid "Date End" |
|||
msgstr "Datum" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Export PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,246 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Pedro Castro Silva <inactive+pcs.sossia@transifex.com>, 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 <inactive+pcs.sossia@transifex.com>, " |
|||
"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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "Saldo" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "Cancelar" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Empresa" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "Criado por" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "Criado em" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Data" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
#, fuzzy |
|||
msgid "Date End" |
|||
msgstr "Data" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "Exibir nome" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "Exportar PDF" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "Última modificação em" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "Última atualização em" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "Última atualização por" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "ou" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,245 +0,0 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * customer_outstanding_statement |
|||
# |
|||
# Translators: |
|||
# Dorin Hongu <dhongu@gmail.com>, 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 <dhongu@gmail.com>, 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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "+120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "1-30 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "30-60 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "60-90 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "90-120 Days Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "<strong>The partner doesn't have due entries.</strong>" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Aging Report at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_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_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Balance Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Cancel" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_company_id |
|||
msgid "Company" |
|||
msgstr "Companie" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_uid |
|||
msgid "Created by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_create_date |
|||
msgid "Created on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Current Due" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.act_window,name:customer_outstanding_statement.customer_outstanding_statement_wizard_action |
|||
msgid "Customer Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_customer_outstanding_statement_wizard |
|||
msgid "Customer Outstanding Statement Wizard" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date" |
|||
msgstr "Data" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_date_end |
|||
msgid "Date End" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Date:" |
|||
msgstr "Data:" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Description" |
|||
msgstr "Descriere" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_display_name |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_display_name |
|||
msgid "Display Name" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_filter_partners_non_due |
|||
msgid "Don't show partners with no due entries" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Due Date" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Ending Balance" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "Export PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_id |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement_id |
|||
msgid "ID" |
|||
msgstr "ID" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_show_aging_buckets |
|||
msgid "Include Aging Buckets" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard___last_update |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_report_customer_outstanding_statement_statement___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model.fields,field_description:customer_outstanding_statement.field_customer_outstanding_statement_wizard_number_partner_ids |
|||
msgid "Number Partner" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Open Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Original Amount" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Outstanding Statement at" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Partner ref:" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "Reference number" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.actions.report,name:customer_outstanding_statement.action_print_customer_outstanding_statement |
|||
msgid "Statement Action to PDF" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "" |
|||
"The outstanding statement provides details of all outstanding " |
|||
"customer receivables 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." |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.statement_document |
|||
msgid "in" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.ui.view,arch_db:customer_outstanding_statement.customer_outstanding_statement_wizard_view |
|||
msgid "or" |
|||
msgstr "" |
|||
|
|||
#. module: customer_outstanding_statement |
|||
#: model:ir.model,name:customer_outstanding_statement.model_report_customer_outstanding_statement_statement |
|||
msgid "report.customer_outstanding_statement.statement" |
|||
msgstr "" |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import customer_outstanding_statement |
@ -1,190 +0,0 @@ |
|||
# 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 CustomerOutstandingStatement(models.AbstractModel): |
|||
"""Model of Customer Outstanding Statement""" |
|||
|
|||
_inherit = 'report.statement.common' |
|||
_name = 'report.customer_outstanding_statement.statement' |
|||
|
|||
def _display_lines_sql_q0(self, date_end): |
|||
return 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() |
|||
) |
|||
|
|||
def _display_lines_sql_q1(self, partners, date_end, account_type): |
|||
partners = tuple(partners) |
|||
return 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()) |
|||
|
|||
def _display_lines_sql_q2(self): |
|||
return 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()) |
|||
|
|||
def _display_lines_sql_q3(self, company_id): |
|||
return 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()) |
|||
|
|||
def _get_account_display_lines(self, company_id, partner_ids, 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): |
|||
company_id = data['company_id'] |
|||
partner_ids = data['partner_ids'] |
|||
date_end = data['date_end'] |
|||
account_type = data['account_type'] |
|||
today = fields.Date.today() |
|||
|
|||
buckets_to_display = {} |
|||
lines_to_display, amount_due = {}, {} |
|||
currency_to_display = {} |
|||
today_display, date_end_display = {}, {} |
|||
|
|||
lines = self._get_account_display_lines( |
|||
company_id, partner_ids, date_end, account_type) |
|||
|
|||
for partner_id in partner_ids: |
|||
lines_to_display[partner_id], amount_due[partner_id] = {}, {} |
|||
currency_to_display[partner_id] = {} |
|||
today_display[partner_id] = self._format_date_to_partner_lang( |
|||
today, partner_id) |
|||
date_end_display[partner_id] = self._format_date_to_partner_lang( |
|||
date_end, partner_id) |
|||
for line in lines[partner_id]: |
|||
currency = self.env['res.currency'].browse(line['currency_id']) |
|||
if currency not in lines_to_display[partner_id]: |
|||
lines_to_display[partner_id][currency] = [] |
|||
currency_to_display[partner_id][currency] = currency |
|||
amount_due[partner_id][currency] = 0.0 |
|||
if not line['blocked']: |
|||
amount_due[partner_id][currency] += line['open_amount'] |
|||
line['balance'] = amount_due[partner_id][currency] |
|||
line['date'] = self._format_date_to_partner_lang( |
|||
line['date'], partner_id) |
|||
line['date_maturity'] = self._format_date_to_partner_lang( |
|||
line['date_maturity'], partner_id) |
|||
lines_to_display[partner_id][currency].append(line) |
|||
|
|||
if data['show_aging_buckets']: |
|||
buckets_to_display = self._get_account_show_buckets( |
|||
company_id, partner_ids, date_end, account_type) |
|||
|
|||
return { |
|||
'doc_ids': partner_ids, |
|||
'doc_model': 'res.partner', |
|||
'docs': self.env['res.partner'].browse(partner_ids), |
|||
'Amount_Due': amount_due, |
|||
'Lines': lines_to_display, |
|||
'Buckets': buckets_to_display, |
|||
'Currencies': currency_to_display, |
|||
'Show_Buckets': data['show_aging_buckets'], |
|||
'Filter_non_due_partners': data['filter_non_due_partners'], |
|||
'Date_end': date_end_display, |
|||
'Date': today_display, |
|||
'account_type': account_type, |
|||
} |
Before Width: 660 | Height: 512 | Size: 24 KiB |
@ -1,76 +0,0 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Partner Outstanding Statement</h2> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="Outstanding_Statement.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span4"> |
|||
<p class="oe_mt32"><div style="text-align:justify">The outstanding statement provides details of all outstanding |
|||
receivables or payables of a partner 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.<br><br>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.</div></p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Configuration</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32">To configure this module, you need to: |
|||
<ul> |
|||
<li>Go to <code>Settings / Users</code> and edit your user to add the corresponding access rights as follows.</li> |
|||
<li>In <code>Application / Accounting & Finance</code>, select <code>Billing</code> or <code>Billing Manager</code> options.</li> |
|||
<li>In <code>Technical Setting</code> mark <code>Show Full Accounting Features</code> options.</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Usage</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32">To use this module, you need to: |
|||
<ul> |
|||
<li>Go to <code>Invoicing > Sales > Master Data > Customers</code> or <code>Invoicing > Purchases > Master Data > Vendors</code> and select one or more</li> |
|||
<li>Press '<code>Action > Partner Outstanding Statement</code>'</li> |
|||
<li>Indicate if you want to display aging buckets</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Credits</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<h3>Contributors</h3> |
|||
<ul> |
|||
<li>Miquel Raïch <<a href="mailto:miquel.raich@eficent.com">miquel.raich@eficent.com</a>></li> |
|||
</ul> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<h3>Maintainer</h3> |
|||
<p> |
|||
This module is maintained by the OCA.<br/> |
|||
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.<br/> |
|||
To contribute to this module, please visit <a href="http://odoo-community.org">http://odoo-community.org</a>.<br/> |
|||
<a href="http://odoo-community.org"><img class="oe_picture oe_centered" src="http://odoo-community.org/logo.png"></a> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import test_customer_outstanding_statement |
@ -1,212 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
<template id="customer_outstanding_statement.statement_document"> |
|||
<t t-call="web.external_layout"> |
|||
<div class="page"> |
|||
<div class="row"> |
|||
<div class="col-xs-5 col-xs-offset-7"> |
|||
<span t-field="o.name"/><br/> |
|||
<span t-raw="o.contact_address.replace('\n\n', '\n').replace('\n', '<br>')"/> |
|||
<span t-field="o.vat"/> |
|||
</div> |
|||
<h4 style="padding-left:15em;padding-top:2em"> |
|||
Outstanding Statement |
|||
</h4> |
|||
<p> |
|||
Date: <span t-esc="Date[o.id]" /><br/><!--Today--> |
|||
<t t-if="o.ref">Partner ref: <span t-field="o.ref"/></t> |
|||
</p> |
|||
|
|||
<t t-if="Lines[o.id]"> |
|||
<br/> |
|||
<t t-foreach="Lines[o.id]" t-as="currency"> |
|||
<br t-if="not currency_first" /> |
|||
<p t-if="account_type == 'receivable'"> |
|||
+ Customer Outstanding Statement at <span t-esc="Date_end[o.id]" /> in <span t-esc="Currencies[o.id][currency].name"/>: |
|||
+ </p> |
|||
<p t-if="account_type == 'payable'"> |
|||
+ Supplier Outstanding Statement at <span t-esc="Date_end[o.id]" /> in <span t-esc="Currencies[o.id][currency].name"/>: |
|||
</p> |
|||
<table class="table table-condensed" style="border: 1px solid black; border-collapse: collapse;"> |
|||
<thead> |
|||
<tr> |
|||
<th style="border-right: 1px solid black;">Reference number</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">Date</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">Due Date</th> |
|||
<th style="border-right: 1px solid black;">Description</th> |
|||
<th class="text-right" style="border-right: 1px solid black;">Original Amount</th> |
|||
<th class="text-right" style="border-right: 1px solid black;">Open Amount</th> |
|||
<th class="text-right" style="border-right: 1px solid black;">Balance</th> |
|||
</tr> |
|||
</thead> |
|||
<tr t-foreach="Lines[o.id][currency]" t-as="line"> |
|||
<t t-if="not line['blocked']"> |
|||
<td style="border-right: 1px solid black;"> |
|||
<span t-esc="line['move_id']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black;"> |
|||
<span t-esc="line['date']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black;"> |
|||
<span t-esc="line['date_maturity']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black;"> |
|||
<t t-if="line['name'] != '/'"> |
|||
<t t-if="not line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] and line['name']"> |
|||
<t t-if="line['name'] not in line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] not in line['name']"><span t-esc="line['ref']"/></t> |
|||
</t> |
|||
</t> |
|||
<t t-if="line['name'] == '/'"><span t-esc="line['ref']"/></t> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="line['amount']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="line['open_amount']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="line['balance']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
</t> |
|||
<t t-if="line['blocked']"> |
|||
<td style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['move_id']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['date']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['date_maturity']"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black; background-color: grey;"> |
|||
<t t-if="line['name'] != '/'"> |
|||
<t t-if="not line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] and line['name']"> |
|||
<t t-if="line['name'] not in line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] not in line['name']"><span t-esc="line['ref']"/></t> |
|||
</t> |
|||
</t> |
|||
<t t-if="line['name'] == '/'"><span t-esc="line['ref']"/></t> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['amount']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['open_amount']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black; background-color: grey;"> |
|||
<span t-esc="line['balance']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
</t> |
|||
</tr> |
|||
<tr> |
|||
<td style="border-right: 1px solid black;"/> |
|||
<td style="border-right: 1px solid black;"> |
|||
<span t-esc="Date_end[o.id]"/> |
|||
</td> |
|||
<td style="border-right: 1px solid black;"/> |
|||
<td style="border-right: 1px solid black;"> |
|||
Ending Balance |
|||
</td> |
|||
<td style="border-right: 1px solid black;"/> |
|||
<td style="border-right: 1px solid black;"/> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Amount_Due[o.id][currency]" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
<p> |
|||
Aging Report at <span t-esc="Date_end[o.id]" /> in <span t-esc="Currencies[o.id][currency].name"/>: |
|||
</p> |
|||
<table class="table table-condensed" t-if="Show_Buckets" style="border: 1px solid black; border-collapse: collapse;"> |
|||
<thead> |
|||
<tr> |
|||
<th class="text-center" style="border-right: 1px solid black;">Current Due</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">1-30 Days Due</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">30-60 Days Due</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">60-90 Days Due</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">90-120 Days Due</th> |
|||
<th class="text-center" style="border-right: 1px solid black;">+120 Days Due</th> |
|||
<th class="text-right" style="border-right: 1px solid black;">Balance Due</th> |
|||
</tr> |
|||
</thead> |
|||
<tr t-if="currency in Buckets[o.id]"> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['current']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['b_1_30']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['b_30_60']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['b_60_90']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['b_90_120']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['b_over_120']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="Buckets[o.id][currency]['balance']" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
</tr> |
|||
<tr t-if="currency not in Buckets[o.id]"> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
<td class="text-right" style="border-right: 1px solid black;"> |
|||
<span t-esc="0.0" t-esc-options='{"widget": "monetary", "display_currency": "currency"}'/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
</t> |
|||
</t> |
|||
<p t-if="not Lines[o.id]"> |
|||
<strong>The partner doesn't have due entries.</strong> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
|||
|
|||
<template id="statement"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-if="not (Filter_non_due_partners and (not Lines[o.id]) and (len(doc_ids) > 1))"> |
|||
<t t-call="customer_outstanding_statement.statement_document" t-lang="o.lang"/> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report id="action_print_customer_outstanding_statement" |
|||
model="res.partner" |
|||
report_type="qweb-pdf" |
|||
menu="False" |
|||
string="Statement Action to PDF" |
|||
name="customer_outstanding_statement.statement" |
|||
file="customer_outstanding_statement.statement" |
|||
/> |
|||
</odoo> |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import customer_outstanding_statement_wizard |
@ -1,54 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
<!-- wizard action on res.partner --> |
|||
<act_window id="customer_outstanding_statement_wizard_action" |
|||
name="Partner Outstanding Statement" |
|||
src_model="res.partner" |
|||
res_model="customer.outstanding.statement.wizard" |
|||
view_type="form" view_mode="form" |
|||
key2="client_action_multi" target="new" |
|||
groups="account.group_account_user"/> |
|||
|
|||
<!-- wizard view --> |
|||
<record id="customer_outstanding_statement_wizard_view" model="ir.ui.view"> |
|||
<field name="name">Customer Outstanding Statement Wizard</field> |
|||
<field name="model">customer.outstanding.statement.wizard</field> |
|||
<field name="arch" type="xml"> |
|||
<form name="Report Options"> |
|||
<div style="text-align:justify"> |
|||
<label string="The outstanding statement provides details of all partner's outstanding |
|||
receivables and 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."/><br/><br/> |
|||
<label string="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."/> |
|||
</div><hr/> |
|||
<group name="main_info"> |
|||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/> |
|||
</group> |
|||
<group name="account_type"> |
|||
<label for="account_type"/> |
|||
<field name="account_type" nolabel="1" widget="radio"/> |
|||
</group> |
|||
|
|||
<group name="dates"> |
|||
<field name="date_end"/> |
|||
</group> |
|||
<group name="aging_report"> |
|||
<field name="show_aging_buckets"/> |
|||
</group> |
|||
<group name="multiple_partners"> |
|||
<field name="number_partner_ids" readonly="1" invisible="1"/> |
|||
<field name="filter_partners_non_due" attrs="{'invisible': [('number_partner_ids', '=', 1)]}"/> |
|||
</group> |
|||
<footer> |
|||
<button name="button_export_pdf" string="Export PDF" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -1,81 +0,0 @@ |
|||
.. 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 |
|||
|
|||
================================= |
|||
Print Partner Activity Statement |
|||
================================= |
|||
|
|||
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. |
|||
|
|||
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. |
|||
|
|||
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* |
|||
#. In *Technical Settings* mark *Show Full Accounting Features* options. |
|||
|
|||
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' |
|||
#. Indicate if you want to display receivables or payables, and if you want to display aging buckets |
|||
|
|||
|
|||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas |
|||
:alt: Try me on Runbot |
|||
:target: https://runbot.odoo-community.org/runbot/91/11.0 |
|||
|
|||
Roadmap |
|||
======= |
|||
|
|||
* In v12, the module should be renamed to `Partner Activity Statement`. |
|||
Maybe merge this module with the `Partner Outstanding Statement` module. |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues |
|||
<https://github.com/OCA/account-financial-reporting/issues>`_. In case of trouble, |
|||
please check there if your issue has already been reported. If you spotted it |
|||
first, help us smash it by providing detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Images |
|||
------ |
|||
|
|||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.png>`_. |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Miquel Raïch <miquel.raich@eficent.com> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
To contribute to this module, please visit https://odoo-community.org. |
@ -1,6 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import report |
|||
from . import wizard |
|||
from . import models |
|||
from . import wizards |
@ -1,13 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Graeme Gellatly |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
|
|||
<odoo noupdate="1"> |
|||
|
|||
<!-- TODO |
|||
<record model="account.payment.term" id="account_payment_term_demo_1"> |
|||
<field name="name">...</field> |
|||
</record> |
|||
--> |
|||
|
|||
</odoo> |
@ -1 +0,0 @@ |
|||
from . import account_payment_term |
@ -1,18 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Graeme Gellatly |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from odoo import api, fields, models, _ |
|||
|
|||
|
|||
class AccountPaymentTerm(models.Model): |
|||
|
|||
_inherit = 'account.payment.term' |
|||
|
|||
aging_periods = fields.Integer(string='Aging Periods to show', default=4) |
|||
|
|||
@api.constrains('aging_periods') |
|||
def _aging_period_limits(self): |
|||
periods = self.mapped('aging_periods') |
|||
if max(periods) > 5 or min(periods) < 0: |
|||
raise ValidationError(_('Only between 0 and 5 Aging periods allowed')) |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import customer_activity_statement |
@ -1,207 +0,0 @@ |
|||
# 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 |
|||
from collections import defaultdict |
|||
|
|||
|
|||
class CustomerActivityStatement(models.AbstractModel): |
|||
"""Model of Customer Activity Statement""" |
|||
|
|||
_inherit = 'report.statement.common' |
|||
_name = 'report.customer_activity_statement.statement' |
|||
|
|||
def _initial_balance_sql_q1(self, partners, date_start, account_type): |
|||
return 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()) |
|||
|
|||
def _initial_balance_sql_q2(self, company_id): |
|||
return """ |
|||
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 = %s |
|||
""" % company_id |
|||
|
|||
def _get_account_initial_balance(self, company_id, partner_ids, |
|||
date_start, account_type, currencies): |
|||
balance_start = dict(map(lambda x: (x, []), partner_ids)) |
|||
balance_start_to_display = defaultdict({}) |
|||
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) |
|||
|
|||
for partner_id, line in balance_start.items(): |
|||
currency = currencies.get( |
|||
line['currency_id'], |
|||
self.env['res.currency'].browse(line['currency_id']) |
|||
) |
|||
balance_start_to_display[partner_id][currency] = \ |
|||
line['balance'] |
|||
return balance_start_to_display |
|||
|
|||
def _display_lines_sql_q1(self, partners, date_start, date_end, |
|||
account_type): |
|||
return 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()) |
|||
|
|||
def _display_lines_sql_q2(self, company_id): |
|||
return 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()) |
|||
|
|||
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["customer.activity.statement.wizard"].with_context( |
|||
active_ids=docids, model="res.partner" |
|||
) |
|||
data = wiz.create({})._prepare_statement() |
|||
company_id = data['company_id'] |
|||
partner_ids = data['partner_ids'] |
|||
date_start = data['date_start'] |
|||
date_end = data['date_end'] |
|||
account_type = data['account_type'] |
|||
today = fields.Date.today() |
|||
|
|||
# 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.id |
|||
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([])} |
|||
|
|||
|
|||
buckets_to_display = {} |
|||
lines_to_display = defaultdict({}) |
|||
amount_due = defaultdict({}) |
|||
currency_to_display = defaultdict({}) |
|||
today_display, date_start_display, date_end_display = {}, {}, {} |
|||
|
|||
balance_start_to_display = self._get_account_initial_balance( |
|||
company_id, partner_ids, date_start, account_type, currencies) |
|||
|
|||
lines = self._get_account_display_lines( |
|||
company_id, partner_ids, date_start, date_end, account_type) |
|||
|
|||
for partner_id in partner_ids: |
|||
today_display[partner_id] = self._format_date_to_partner_lang( |
|||
today, partner_id, date_formats['partner_id']) |
|||
date_start_display[partner_id] = self._format_date_to_partner_lang( |
|||
date_start, partner_id, date_formats['partner_id']) |
|||
date_end_display[partner_id] = self._format_date_to_partner_lang( |
|||
date_end, partner_id, date_formats['partner_id']) |
|||
|
|||
for line in lines[partner_id]: |
|||
currency = self.env['res.currency'].browse(line['currency_id']) |
|||
if currency not in lines_to_display[partner_id]: |
|||
lines_to_display[partner_id][currency] = [] |
|||
currency_to_display[partner_id][currency] = currency |
|||
if currency in balance_start_to_display[partner_id]: |
|||
amount_due[partner_id][currency] = \ |
|||
balance_start_to_display[partner_id][currency] |
|||
else: |
|||
amount_due[partner_id][currency] = 0.0 |
|||
if not line['blocked']: |
|||
amount_due[partner_id][currency] += line['amount'] |
|||
line['balance'] = amount_due[partner_id][currency] |
|||
line['date'] = self._format_date_to_partner_lang( |
|||
line['date'], partner_id, date_formats['partner_id']) |
|||
line['date_maturity'] = self._format_date_to_partner_lang( |
|||
line['date_maturity'], partner_id, date_formats['partner_id']) |
|||
lines_to_display[partner_id][currency].append(line) |
|||
|
|||
if data['show_aging_buckets']: |
|||
buckets_to_display = self._get_account_show_buckets( |
|||
company_id, partner_ids, date_end, account_type) |
|||
|
|||
return { |
|||
'doc_ids': partner_ids, |
|||
'doc_model': 'res.partner', |
|||
'docs': self.env['res.partner'].browse(partner_ids), |
|||
'Amount_Due': amount_due, |
|||
'Balance_forward': balance_start_to_display, |
|||
'Lines': lines_to_display, |
|||
'Buckets': buckets_to_display, |
|||
'Currencies': currency_to_display, |
|||
'Show_Buckets': data['show_aging_buckets'], |
|||
'Filter_non_due_partners': data['filter_non_due_partners'], |
|||
'Date_start': date_start_display, |
|||
'Date_end': date_end_display, |
|||
'Date': today_display, |
|||
'account_type': account_type, |
|||
} |
@ -1,368 +0,0 @@ |
|||
# 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 = 'report.statement.common' |
|||
|
|||
def _format_date_to_partner_lang(self, date, partner_id, date_formats=DEFAULT_SERVER_DATE_FORMAT): |
|||
""" |
|||
Note: Function kept for backwards compatibility in V12 in case of override. |
|||
Consider deprecating in v13 migration or removing |
|||
""" |
|||
return date.strftime(lang.date_format) |
|||
|
|||
def _get_account_initial_balance(self, company_id, partner_ids, |
|||
date_start, account_type): |
|||
res = dict(map(lambda x: (x, []), partner_ids)) |
|||
partners = ', '.join([str(i) for i in partner_ids]) |
|||
date_start = datetime.strptime( |
|||
date_start, DEFAULT_SERVER_DATE_FORMAT).date() |
|||
# 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(): |
|||
res[row.pop('partner_id')].append(row) |
|||
return res |
|||
|
|||
def _display_lines_sql_q1(self, partners, date_start, date_end, |
|||
account_type): |
|||
return """ |
|||
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 (%s) AND at.type = '%s' |
|||
AND '%s' <= l.date AND l.date <= '%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 |
|||
""" % (partners, account_type, date_start, date_end) |
|||
|
|||
def _display_lines_sql_q2(self, company_id): |
|||
return """ |
|||
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 = %s |
|||
""" % company_id |
|||
|
|||
def _show_buckets_sql_q0(self, date_end): |
|||
return 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()) |
|||
|
|||
def _show_buckets_sql_q1(self, partners, date_end, account_type): |
|||
return 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()) |
|||
|
|||
def _show_buckets_sql_q2(self, date_end, minus_30, minus_60, minus_90, |
|||
minus_120): |
|||
return """ |
|||
SELECT partner_id, currency_id, date_maturity, open_due, |
|||
open_due_currency, move_id, company_id, |
|||
CASE |
|||
WHEN '%s' <= date_maturity AND currency_id is null |
|||
THEN open_due |
|||
WHEN '%s' <= date_maturity AND currency_id is not null |
|||
THEN open_due_currency |
|||
ELSE 0.0 |
|||
END as current, |
|||
CASE |
|||
WHEN '%s' < date_maturity AND date_maturity < '%s' |
|||
AND currency_id is null THEN open_due |
|||
WHEN '%s' < date_maturity AND date_maturity < '%s' |
|||
AND currency_id is not null |
|||
THEN open_due_currency |
|||
ELSE 0.0 |
|||
END as b_1_30, |
|||
CASE |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is null THEN open_due |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is not null |
|||
THEN open_due_currency |
|||
ELSE 0.0 |
|||
END as b_30_60, |
|||
CASE |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is null THEN open_due |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is not null |
|||
THEN open_due_currency |
|||
ELSE 0.0 |
|||
END as b_60_90, |
|||
CASE |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is null THEN open_due |
|||
WHEN '%s' < date_maturity AND date_maturity <= '%s' |
|||
AND currency_id is not null |
|||
THEN open_due_currency |
|||
ELSE 0.0 |
|||
END as b_90_120, |
|||
CASE |
|||
WHEN date_maturity <= '%s' AND currency_id is null |
|||
THEN open_due |
|||
WHEN date_maturity <= '%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 |
|||
""" % (date_end, date_end, minus_30, date_end, minus_30, date_end, |
|||
minus_60, minus_30, minus_60, minus_30, minus_90, minus_60, |
|||
minus_90, minus_60, minus_120, minus_90, minus_120, minus_90, |
|||
minus_120, minus_120) |
|||
|
|||
def _show_buckets_sql_q3(self, company_id): |
|||
return 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()) |
|||
|
|||
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(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(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): |
|||
buckets = dict(map(lambda x: (x, []), partner_ids)) |
|||
partners = ', '.join([str(i) for i in partner_ids]) |
|||
date_end = datetime.strptime( |
|||
date_end, DEFAULT_SERVER_DATE_FORMAT).date() |
|||
full_dates = self._get_bucket_dates(date_end) |
|||
# pylint: disable=E8103 |
|||
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) |
|||
for partner_id in partner_ids: |
|||
buckets_to_display[partner_id] = {} |
|||
for line in buckets[partner_id]: |
|||
currency = self.env['res.currency'].browse( |
|||
line['currency_id']) |
|||
if currency not in buckets_to_display[partner_id]: |
|||
buckets_to_display[partner_id][currency] = [] |
|||
buckets_to_display[partner_id][currency] = line |
|||
return buckets_to_display |
|||
|
|||
@api.multi |
|||
def get_report_values(self, docids, data): |
|||
|
|||
company_id = data['company_id'] |
|||
partner_ids = data['partner_ids'] |
|||
date_start = data['date_start'] |
|||
date_end = data['date_end'] |
|||
account_type = data['account_type'] |
|||
today = fields.Date.today() |
|||
|
|||
balance_start_to_display, buckets_to_display = {}, {} |
|||
lines_to_display, amount_due = {}, {} |
|||
currency_to_display = {} |
|||
today_display, date_start_display, date_end_display = {}, {}, {} |
|||
|
|||
balance_start = self._get_account_initial_balance( |
|||
company_id, partner_ids, date_start, account_type) |
|||
|
|||
for partner_id in partner_ids: |
|||
balance_start_to_display[partner_id] = {} |
|||
for line in balance_start[partner_id]: |
|||
currency = self.env['res.currency'].browse(line['currency_id']) |
|||
if currency not in balance_start_to_display[partner_id]: |
|||
balance_start_to_display[partner_id][currency] = [] |
|||
balance_start_to_display[partner_id][currency] = \ |
|||
line['balance'] |
|||
|
|||
lines = self._get_account_display_lines( |
|||
company_id, partner_ids, date_start, date_end, account_type) |
|||
|
|||
for partner_id in partner_ids: |
|||
lines_to_display[partner_id], amount_due[partner_id] = {}, {} |
|||
currency_to_display[partner_id] = {} |
|||
today_display[partner_id] = self._format_date_to_partner_lang( |
|||
today, partner_id) |
|||
date_start_display[partner_id] = self._format_date_to_partner_lang( |
|||
date_start, partner_id) |
|||
date_end_display[partner_id] = self._format_date_to_partner_lang( |
|||
date_end, partner_id) |
|||
for line in lines[partner_id]: |
|||
currency = self.env['res.currency'].browse(line['currency_id']) |
|||
if currency not in lines_to_display[partner_id]: |
|||
lines_to_display[partner_id][currency] = [] |
|||
currency_to_display[partner_id][currency] = currency |
|||
if currency in balance_start_to_display[partner_id]: |
|||
amount_due[partner_id][currency] = \ |
|||
balance_start_to_display[partner_id][currency] |
|||
else: |
|||
amount_due[partner_id][currency] = 0.0 |
|||
if not line['blocked']: |
|||
amount_due[partner_id][currency] += line['amount'] |
|||
line['balance'] = amount_due[partner_id][currency] |
|||
line['date'] = self._format_date_to_partner_lang( |
|||
line['date'], partner_id) |
|||
line['date_maturity'] = self._format_date_to_partner_lang( |
|||
line['date_maturity'], partner_id) |
|||
lines_to_display[partner_id][currency].append(line) |
|||
|
|||
if data['show_aging_buckets']: |
|||
buckets_to_display = self._get_account_show_buckets( |
|||
company_id, partner_ids, date_end, account_type) |
|||
|
|||
|
|||
return { |
|||
'doc_ids': partner_ids, |
|||
'doc_model': 'res.partner', |
|||
'docs': self.env['res.partner'].browse(partner_ids), |
|||
'Amount_Due': amount_due, |
|||
'Balance_forward': balance_start_to_display, |
|||
'Lines': lines_to_display, |
|||
'Buckets': buckets_to_display, |
|||
'Currencies': currency_to_display, |
|||
'Show_Buckets': data['show_aging_buckets'], |
|||
'Filter_non_due_partners': data['filter_non_due_partners'], |
|||
'Date_start': date_start_display, |
|||
'Date_end': date_end_display, |
|||
'Date': today_display, |
|||
'account_type': account_type, |
|||
} |
Before Width: 662 | Height: 514 | Size: 34 KiB |
Before Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -1,78 +0,0 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Partner Activity Statement</h2> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="Activity_Statement.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span4"> |
|||
<p class="oe_mt32"><div style="text-align:justify">The activity statement provides |
|||
details of all activity on the receivables or payables of a partner 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.<br><br>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.</div></p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Configuration</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32">To configure this module, you need to: |
|||
<ul> |
|||
<li>Go to <code>Settings / Users</code> and edit your user to add the corresponding access rights as follows.</li> |
|||
<li>In <code>Application / Accounting & Finance</code>, select <code>Billing</code> or <code>Billing Manager</code> options.</li> |
|||
<li>In <code>Technical Setting</code> mark <code>Show Full Accounting Features</code> options.</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Usage</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32">To use this module, you need to: |
|||
<ul> |
|||
<li>Go to <code>Invoicing > Sales > Master Data > Customers</code> or <code>Invoicing > Purchases > Master Data > Vendors</code> and select one or more</li> |
|||
<li>Press '<code>Action > Partner Activity Statement</code>'</li> |
|||
<li>Indicate if you want to display aging buckets</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Credits</h2> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<h3>Contributors</h3> |
|||
<ul> |
|||
<li>Miquel Raïch <<a href="mailto:miquel.raich@eficent.com">miquel.raich@eficent.com</a>></li> |
|||
</ul> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<h3>Maintainer</h3> |
|||
<p> |
|||
This module is maintained by the OCA.<br/> |
|||
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.<br/> |
|||
To contribute to this module, please visit <a href="http://odoo-community.org">http://odoo-community.org</a>.<br/> |
|||
<a href="http://odoo-community.org"><img class="oe_picture oe_centered" src="http://odoo-community.org/logo.png"></a> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import test_customer_activity_statement |
@ -1,67 +0,0 @@ |
|||
# 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 TestCustomerActivityStatement(TransactionCase): |
|||
""" |
|||
Tests for Customer Activity Statement. |
|||
""" |
|||
def setUp(self): |
|||
super(TestCustomerActivityStatement, self).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.customer_activity_statement.statement'] |
|||
self.wiz = self.env['customer.activity.statement.wizard'] |
|||
self.report_name = 'customer_activity_statement.statement' |
|||
self.report_title = 'Customer Activity 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_activity_statement(self): |
|||
|
|||
wiz_id = self.wiz.with_context( |
|||
active_ids=[self.partner1.id, self.partner2.id], |
|||
).create({}) |
|||
|
|||
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_activity_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("Show_Buckets", report, |
|||
"There was an error while compiling the report.") |
@ -1,34 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Graeme Gellatly |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
|
|||
<odoo> |
|||
|
|||
<record model="ir.ui.view" id="account_payment_term_form_view"> |
|||
<field name="name">account.payment.term.form (in customer_activity_statement)</field> |
|||
<field name="model">account.payment.term</field> |
|||
<field name="inherit_id" ref="TODO othermodule.form_view"/> |
|||
<field name="arch" type="xml"> |
|||
<!-- TODO --> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="account_payment_term_search_view"> |
|||
<field name="name">account.payment.term.search (in customer_activity_statement)</field> |
|||
<field name="model">account.payment.term</field> |
|||
<field name="inherit_id" ref="TODO othermodule.search_view"/> |
|||
<field name="arch" type="xml"> |
|||
<!-- TODO --> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="account_payment_term_tree_view"> |
|||
<field name="name">account.payment.term.tree (in customer_activity_statement)</field> |
|||
<field name="model">account.payment.term</field> |
|||
<field name="inherit_id" ref="TODO othermodule.tree_view"/> |
|||
<field name="arch" type="xml"> |
|||
<!-- TODO --> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -1,171 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
<template id="report_assets_common" name="oca_statements report assets" inherit_id="web.report_assets_common"> |
|||
<xpath expr="." position="inside"> |
|||
<link href="/customer_activity_statement/static/src/less/layout_statement.less" rel="stylesheet"/> |
|||
</xpath> |
|||
</template> |
|||
|
|||
<template id="customer_activity_statement.statement_document"> |
|||
<t t-call="web.external_layout"> |
|||
<div class="page"> |
|||
<div class="row"> |
|||
<div class="col-xs-5 col-xs-offset-7"> |
|||
<span t-field="o.name"/><br/> |
|||
<span t-raw="o.contact_address.replace('\n\n', '\n').replace('\n', '<br>')"/> |
|||
<span t-field="o.vat"/> |
|||
</div> |
|||
<h4 style="padding-left:15em;padding-top:2em"> |
|||
Activity Statement |
|||
</h4> |
|||
<p> |
|||
Date: <span t-esc="Date[o.id]" /><br/><!--Today--> |
|||
<t t-if="o.ref">Partner ref: <span t-field="o.ref"/></t> |
|||
</p> |
|||
|
|||
<t t-if="Lines[o.id]"> |
|||
<br/> |
|||
<t t-foreach="Lines[o.id]" t-as="currency"> |
|||
<br t-if="not currency_first" /> |
|||
<p > |
|||
<span t-esc="'Customer' if account_type == 'receivable' else 'Supplier'"/> Activity Statement between <span t-esc="Date_start[o.id]" /> and <span t-esc="Date_end[o.id]" /> in <span t-esc="Currencies[o.id][currency].name"/>: |
|||
</p> |
|||
<table class="table table-condensed table-statement" > |
|||
<thead> |
|||
<tr> |
|||
<th >Reference number</th> |
|||
<th >Date</th> |
|||
<th >Description</th> |
|||
<th class="amount" >Amount</th> |
|||
<th class="amount" >Balance</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td /> |
|||
<td > |
|||
<span t-esc="Date_start[o.id]"/> |
|||
</td> |
|||
<td > |
|||
Balance Forward |
|||
</td> |
|||
<td /> |
|||
<td class="amount" > |
|||
<span t-esc="Balance_forward[o.id].get(currency, 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr t-foreach="Lines[o.id][currency]" t-as="line" t-att-class="'statement-blocked' if line['blocked'] else ''"> |
|||
|
|||
<td > |
|||
<span t-esc="line['move_id']"/> |
|||
</td> |
|||
<td > |
|||
<span t-esc="line['date']"/> |
|||
</td> |
|||
<td > |
|||
<t t-if="line['name'] != '/'"> |
|||
<t t-if="not line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] and line['name']"> |
|||
<t t-if="line['name'] not in line['ref']"><span t-esc="line['name']"/></t> |
|||
<t t-if="line['ref'] not in line['name']"><span t-esc="line['ref']"/></t> |
|||
</t> |
|||
</t> |
|||
<t t-if="line['name'] == '/'"><span t-esc="line['ref']"/></t> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="line['amount']" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="line['balance']" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td /> |
|||
<td > |
|||
<span t-esc="Date_end[o.id]"/> |
|||
</td> |
|||
<td > |
|||
Ending Balance |
|||
</td> |
|||
<td /> |
|||
<td class="amount" > |
|||
<span t-esc="Amount_Due[o.id][currency]" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<p> |
|||
Aging Report at <span t-esc="Date_end[o.id]" /> in <span t-esc="Currencies[o.id][currency].name"/>: |
|||
</p> |
|||
<table class="table table-condensed table-statement" t-if="Show_Buckets" > |
|||
<thead> |
|||
<tr> |
|||
<th class="amount" >Current Due</th> |
|||
<th class="amount" >1-30 Days Due</th> |
|||
<th class="amount" >30-60 Days Due</th> |
|||
<th class="amount" >60-90 Days Due</th> |
|||
<th class="amount" >90-120 Days Due</th> |
|||
<th class="amount" >+120 Days Due</th> |
|||
<th class="amount" >Balance Due</th> |
|||
</tr> |
|||
</thead> |
|||
<t t-set="buckets" t-value="Buckets[o.id].get(currency, {})" /> |
|||
<tbody > |
|||
<tr > |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('current', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('b_1_30', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('b_30_60', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('b_60_90', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('b_90_120', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('b_over_120', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
<td class="amount" > |
|||
<span t-esc="buckets.get('balance', 0.0)" t-options="{'widget': 'monetary', 'display_currency': currency}"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</t> |
|||
</t> |
|||
<p t-if="not Lines[o.id]"> |
|||
<strong>The partner doesn't have due entries.</strong> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
|||
|
|||
<template id="statement"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-if="not (Filter_non_due_partners and (not Lines[o.id]) and (len(doc_ids) > 1))"> |
|||
<t t-call="customer_activity_statement.statement_document" t-lang="o.lang"/> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report id="action_print_customer_activity_statement" |
|||
model="res.partner" |
|||
report_type="qweb-pdf" |
|||
menu="False" |
|||
string="Activity Statement" |
|||
name="customer_activity_statement.statement" |
|||
file="customer_activity_statement.statement" |
|||
/> |
|||
</odoo> |
@ -1,3 +0,0 @@ |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import customer_activity_statement_wizard |
@ -1,38 +0,0 @@ |
|||
# 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 import api, fields, models |
|||
|
|||
|
|||
class CustomerActivityStatementWizard(models.TransientModel): |
|||
"""Customer Activity Statement wizard.""" |
|||
|
|||
_inherit = 'statement.common' |
|||
_name = 'customer.activity.statement.wizard' |
|||
_description = 'Customer Activity Statement Wizard' |
|||
|
|||
|
|||
def _get_date_start(self): |
|||
for record in self: |
|||
record.date_start = fields.Date.context_today() - relativedelta(day=1) |
|||
|
|||
date_start = fields.Date(required=True, default='_get_date_start') |
|||
|
|||
account_type = fields.Selection( |
|||
[('receivable', 'Receivable'), |
|||
('payable', 'Payable')], string='Account type', default='receivable') |
|||
|
|||
def _export(self): |
|||
"""Export to PDF.""" |
|||
data = self._prepare_statement() |
|||
return self.env.ref( |
|||
'customer_statement' |
|||
'.action_print_customer_activity_statement').report_action( |
|||
self, data=data) |
|||
|
|||
def _prepare_activity_statement(self): |
|||
res = super()._prepare_activity_statement() |
|||
res.update({'date_start': self.date_start}) |
|||
return res |
@ -1,56 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
<!-- wizard action on res.partner --> |
|||
<act_window id="customer_activity_statement_wizard_action" |
|||
name="Partner Activity Statement" |
|||
src_model="res.partner" |
|||
res_model="customer.activity.statement.wizard" |
|||
view_type="form" view_mode="form" |
|||
key2="client_action_multi" target="new" |
|||
groups="account.group_account_user"/> |
|||
|
|||
<!-- wizard view --> |
|||
<record id="customer_activity_statement_wizard_view" model="ir.ui.view"> |
|||
<field name="name">Customer Activity Statement Wizard</field> |
|||
<field name="model">customer.activity.statement.wizard</field> |
|||
<field name="arch" type="xml"> |
|||
<form name="Report Options"> |
|||
<div style="text-align:justify"> |
|||
<label string="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."/><br/><br/> |
|||
<label string="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."/> |
|||
</div><hr/> |
|||
<group name="main_info"> |
|||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/> |
|||
</group> |
|||
<group name="account_type"> |
|||
<label for="account_type"/> |
|||
<field name="account_type" nolabel="1" widget="radio"/> |
|||
</group> |
|||
|
|||
<group name="dates"> |
|||
<field name="date_start"/> |
|||
<field name="date_end"/> |
|||
</group> |
|||
<group name="aging_report"> |
|||
<field name="show_aging_buckets"/> |
|||
</group> |
|||
<group name="multiple_partners"> |
|||
<field name="number_partner_ids" readonly="1" invisible="1"/> |
|||
<field name="filter_partners_non_due" attrs="{'invisible': [('number_partner_ids', '=', 1)]}"/> |
|||
</group> |
|||
<footer> |
|||
<button name="button_export_pdf" string="Export PDF" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -1,27 +0,0 @@ |
|||
# 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 import api, fields, models |
|||
|
|||
|
|||
class CustomerOutstandingStatementWizard(models.TransientModel): |
|||
"""Customer Outstanding Statement wizard.""" |
|||
|
|||
_name = 'customer.outstanding.statement.wizard' |
|||
_description = 'Customer Outstanding Statement Wizard' |
|||
|
|||
company_id = fields.Many2one( |
|||
comodel_name='res.company', |
|||
default=lambda self: self.env.user.company_id, |
|||
string='Company' |
|||
) |
|||
|
|||
def _export(self): |
|||
"""Export to PDF.""" |
|||
data = self._prepare_statement() |
|||
return self.env.ref( |
|||
'customer_statement' |
|||
'.action_print_customer_outstanding_statement').report_action( |
|||
self, data=data) |
@ -1,47 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Graeme Gellatly |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from odoo import api, fields, models, _ |
|||
|
|||
|
|||
class StatementCommon(models.AbstractModel): |
|||
|
|||
_name = 'statement.common' |
|||
|
|||
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.Selection( |
|||
[('auto', 'Auto'), ('always', 'Always'), ('never', 'Never')], |
|||
string='Include Aging Buckets', 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) |
|||
|
|||
@api.multi |
|||
def button_export_pdf(self): |
|||
self.ensure_one() |
|||
return self._export() |
|||
|
|||
def _prepare_statement(self): |
|||
self.ensure_one() |
|||
return { |
|||
'date_start': self.date_start, |
|||
'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, |
|||
} |
|||
|
|||
def _export(self): |
|||
raise NotImplementedError |
@ -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 <https://github.com/OCA/account-financial-reporting/issues>`_. |
|||
In case of trouble, please check there if your issue has already been reported. |
|||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|||
`feedback <https://github.com/OCA/account-financial-reporting/issues/new?body=module:%20partner_statement%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|||
|
|||
Do not contact contributors directly about support or help with technical issues. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Authors |
|||
~~~~~~~ |
|||
|
|||
* Eficent |
|||
|
|||
Contributors |
|||
~~~~~~~~~~~~ |
|||
|
|||
* Miquel Raïch <miquel.raich@eficent.com> |
|||
* Graeme Gellatly <graeme@o4sb.com> |
|||
|
|||
Maintainers |
|||
~~~~~~~~~~~ |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
This module is part of the `OCA/account-financial-reporting <https://github.com/OCA/account-financial-reporting/tree/12.0/partner_statement>`_ project on GitHub. |
|||
|
|||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
@ -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. |
@ -0,0 +1,2 @@ |
|||
* Miquel Raïch <miquel.raich@eficent.com> |
|||
* Graeme Gellatly <graeme@o4sb.com> |
@ -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. |
@ -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 |
@ -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. |
@ -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. |
@ -0,0 +1,3 @@ |
|||
from . import report_statement_common |
|||
from . import activity_statement |
|||
from . import outstanding_statement |
@ -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) |
@ -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) |
@ -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, |
|||
} |
@ -0,0 +1,14 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="group_activity_statement" model="res.groups"> |
|||
<field name="name">Use activity statements</field> |
|||
<field name="category_id" ref="base.module_category_hidden"/> |
|||
</record> |
|||
|
|||
<record id="group_outstanding_statement" model="res.groups"> |
|||
<field name="name">Use outstanding statements</field> |
|||
<field name="category_id" ref="base.module_category_hidden"/> |
|||
</record> |
|||
|
|||
</odoo> |
Before Width: 128 | Height: 128 | Size: 9.2 KiB After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -0,0 +1,3 @@ |
|||
from . import test_activity_statement |
|||
from . import test_outstanding_statement |
|||
from . import test_res_config_settings |
@ -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) |
@ -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') |
@ -0,0 +1,130 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
|
|||
<template id="partner_statement.activity_statement_document"> |
|||
<t t-call="web.external_layout"> |
|||
<t t-set="o" t-value="o.with_context({'lang': lang})"/> |
|||
<t t-set="address"> |
|||
<address t-esc="o" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> |
|||
<div t-if="o.vat" class="mt16"><t t-esc="company.country_id.vat_label or 'Tax ID'"/>: <span t-field="o.partner_id.vat"/></div> |
|||
</t> |
|||
<div class="page"> |
|||
<h2 >Statement of Account</h2> |
|||
<p> |
|||
Date: <span t-esc="d['today']" /><br/> |
|||
<t t-if="o.ref">Partner ref: <span t-field="o.ref"/></t> |
|||
</p> |
|||
|
|||
<t t-if="d['currencies']"> |
|||
<br/> |
|||
<t t-foreach="d['currencies'].items()" t-as="currency"> |
|||
<t t-set="display_currency" t-value="Currencies[currency[0]]" /> |
|||
<t t-set="currency" t-value="currency[1]" /> |
|||
<p> |
|||
<span t-esc="'' if account_type == 'receivable' else 'Supplier '"/>Statement between <span t-esc="d['start']" /> and <span t-esc="d['end']" /> in <span t-esc="display_currency.name"/> |
|||
</p> |
|||
<table class="table table-condensed table-statement"> |
|||
<thead> |
|||
<tr> |
|||
<th>Reference number</th> |
|||
<th>Date</th> |
|||
<th>Description</th> |
|||
<th class="amount">Amount</th> |
|||
<th class="amount">Balance</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td /> |
|||
<td> |
|||
<span t-esc="d['start']"/> |
|||
</td> |
|||
<td> |
|||
Balance Forward |
|||
</td> |
|||
<td /> |
|||
<td class="amount"> |
|||
<span t-esc="currency['balance_forward']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr t-foreach="currency['lines']" t-as="line" t-att-class="'statement-blocked' if line['blocked'] else ''"> |
|||
|
|||
<td> |
|||
<span t-esc="line['move_id']"/> |
|||
</td> |
|||
<td> |
|||
<span t-esc="line['date']"/> |
|||
</td> |
|||
<td> |
|||
<t t-if="line['name'] != '/'"> |
|||
<t t-if="not line['ref']"> |
|||
<span t-esc="line['name']"/> |
|||
</t> |
|||
<t t-if="line['ref'] and line['name']"> |
|||
<t t-if="line['name'] not in line['ref']"> |
|||
<span t-esc="line['name']"/> |
|||
</t> |
|||
<t t-if="line['ref'] not in line['name']"> |
|||
<span t-esc="line['ref']"/> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
<t t-if="line['name'] == '/'"> |
|||
<span t-esc="line['ref']"/> |
|||
</t> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="line['amount']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="line['balance']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td /> |
|||
<td> |
|||
<span t-esc="d['end']"/> |
|||
</td> |
|||
<td> |
|||
Ending Balance |
|||
</td> |
|||
<td /> |
|||
<td class="amount"> |
|||
<span t-esc="currency['amount_due']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<t t-call="partner_statement.aging_buckets" t-if="currency['buckets']" /> |
|||
</t> |
|||
</t> |
|||
<p t-if="d.get('no_entries')"> |
|||
<strong>The partner doesn't have due entries.</strong> |
|||
</p> |
|||
</div> |
|||
</t> |
|||
</template> |
|||
|
|||
<template id="activity_statement"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-set="d" t-value="data.get(o.id)" /> |
|||
<t t-call="partner_statement.activity_statement_document" t-lang="o.lang"/> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report id="action_print_activity_statement" |
|||
model="res.partner" |
|||
report_type="qweb-pdf" |
|||
menu="False" |
|||
string="Activity Statement" |
|||
name="partner_statement.activity_statement" |
|||
file="partner_statement.activity_statement" |
|||
/> |
|||
|
|||
</odoo> |
@ -0,0 +1,49 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
|
|||
<template id="aging_buckets"> |
|||
<p> |
|||
Aging Report at <span t-esc="d['end']" /> in <span t-esc="display_currency.name"/>: |
|||
</p> |
|||
<table class="table table-sm table-statement"> |
|||
<thead> |
|||
<tr> |
|||
<t t-foreach="bucket_labels" t-as="bl"> |
|||
<th class="amount"> |
|||
<span t-esc="bl" /> |
|||
</th> |
|||
</t> |
|||
</tr> |
|||
</thead> |
|||
<t t-set="buckets" t-value="currency['buckets']" /> |
|||
<tbody> |
|||
<tr> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('current', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('b_1_30', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('b_30_60', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('b_60_90', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('b_90_120', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('b_over_120', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="buckets.get('balance', 0.0)" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</template> |
|||
|
|||
</odoo> |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
|
|||
<template id="report_assets_common" name="oca_statements report assets" inherit_id="web.report_assets_common"> |
|||
<xpath expr="." position="inside"> |
|||
<link rel="stylesheet" href="/partner_statement/static/src/scss/layout_statement.scss" type="text/scss" /> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</odoo> |
@ -0,0 +1,126 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
|
|||
<template id="partner_statement.outstanding_statement_document"> |
|||
<t t-call="web.external_layout"> |
|||
<t t-set="o" t-value="o.with_context({'lang': lang})"/> |
|||
<t t-set="address"> |
|||
<address t-esc="o" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> |
|||
<div t-if="o.vat" class="mt16"><t t-esc="company.country_id.vat_label or 'Tax ID'"/>: <span t-field="o.partner_id.vat"/></div> |
|||
</t> |
|||
<div class="page"> |
|||
<h2 >Statement of Account</h2> |
|||
<p> |
|||
Date: <span t-esc="d['today']" /><br/> |
|||
<t t-if="o.ref">Partner ref: <span t-field="o.ref"/></t> |
|||
</p> |
|||
|
|||
<t t-if="d['currencies']"> |
|||
<br/> |
|||
<t t-foreach="d['currencies'].items()" t-as="currency"> |
|||
<t t-set="display_currency" t-value="Currencies[currency[0]]" /> |
|||
<t t-set="currency" t-value="currency[1]" /> |
|||
<p> |
|||
<span t-esc="'' if account_type == 'receivable' else 'Supplier '"/>Statement up to <span t-esc="d['end']" /> in <span t-esc="display_currency.name"/> |
|||
</p> |
|||
<table class="table table-sm table-statement"> |
|||
<thead> |
|||
<tr> |
|||
<th>Reference number</th> |
|||
<th>Date</th> |
|||
<th>Due Date</th> |
|||
<th>Description</th> |
|||
<th class="amount">Original</th> |
|||
<th class="amount">Open Amount</th> |
|||
<th class="amount">Balance</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr t-foreach="currency['lines']" t-as="line" t-att-class="'statement-blocked' if line['blocked'] else ''"> |
|||
|
|||
<td> |
|||
<span t-esc="line['move_id']"/> |
|||
</td> |
|||
<td> |
|||
<span t-esc="line['date']"/> |
|||
</td> |
|||
<td> |
|||
<span t-esc="line['date_maturity']"/> |
|||
</td> |
|||
<td> |
|||
<t t-if="line['name'] != '/'"> |
|||
<t t-if="not line['ref']"> |
|||
<span t-esc="line['name']"/> |
|||
</t> |
|||
<t t-if="line['ref'] and line['name']"> |
|||
<t t-if="line['name'] not in line['ref']"> |
|||
<span t-esc="line['name']"/> |
|||
</t> |
|||
<t t-if="line['ref'] not in line['name']"> |
|||
<span t-esc="line['ref']"/> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
<t t-if="line['name'] == '/'"> |
|||
<span t-esc="line['ref']"/> |
|||
</t> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="line['amount']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="line['open_amount']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
<td class="amount"> |
|||
<span t-esc="line['balance']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td /> |
|||
<td> |
|||
<span t-esc="d['end']"/> |
|||
</td> |
|||
<td> |
|||
Ending Balance |
|||
</td> |
|||
<td /> |
|||
<td /> |
|||
<td /> |
|||
<td class="amount"> |
|||
<span t-esc="currency['amount_due']" t-options="{'widget': 'monetary', 'display_currency': display_currency}"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<t t-call="partner_statement.aging_buckets" t-if="currency['buckets']" /> |
|||
</t> |
|||
</t> |
|||
<p t-if="d.get('no_entries')"> |
|||
<strong>The partner doesn't have due entries.</strong> |
|||
</p> |
|||
</div> |
|||
|
|||
</t> |
|||
</template> |
|||
|
|||
<template id="outstanding_statement"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-set="d" t-value="data.get(o.id)" /> |
|||
<t t-call="partner_statement.outstanding_statement_document" t-lang="o.lang"/> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report id="action_print_outstanding_statement" |
|||
model="res.partner" |
|||
report_type="qweb-pdf" |
|||
menu="False" |
|||
string="Outstanding Statement" |
|||
name="partner_statement.outstanding_statement" |
|||
file="partner_statement.outstanding_statement" |
|||
/> |
|||
</odoo> |
@ -0,0 +1,59 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="res_config_settings_view_form" model="ir.ui.view"> |
|||
<field name="name">res.config.settings.view.form (in partner_statement)</field> |
|||
<field name="model">res.config.settings</field> |
|||
<field name="priority" eval="40"/> |
|||
<field name="inherit_id" ref="account.res_config_settings_view_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@id='account_followup']" position="after"> |
|||
<div class="col-12 col-lg-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="group_activity_statement" /> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="group_activity_statement"/> |
|||
<div class="text-muted"> |
|||
Activity Statements show all transactions between two dates. |
|||
</div> |
|||
<div class="content-group" attrs="{'invisible': [('group_activity_statement', '=', False), ('group_outstanding_statement', '=', False)]}"> |
|||
<div class="row mt16"> |
|||
<label for="default_aging_type" class="col-lg-3 o_light_label"/> |
|||
<field name="default_aging_type" /> |
|||
</div> |
|||
<div > |
|||
<field name="default_show_aging_buckets" class="oe_inline" /> |
|||
<label for="default_show_aging_buckets" class="o_light_label"/> |
|||
</div> |
|||
<div > |
|||
<field name="default_filter_partners_non_due" class="oe_inline" /> |
|||
<label for="default_filter_partners_non_due" class="o_light_label"/> |
|||
</div> |
|||
<div > |
|||
<field name="default_filter_negative_balances" class="oe_inline" /> |
|||
<label for="default_filter_negative_balances" class="o_light_label"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-12 col-lg-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="group_outstanding_statement" /> |
|||
|
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="group_outstanding_statement"/> |
|||
<div class="text-muted"> |
|||
Outstanding Statements show all transactions up to a date. |
|||
</div> |
|||
<div class="text-muted" attrs="{'invisible': [('group_outstanding_statement', '=', False)]}"> |
|||
Please set defaults under Activity Statements. |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -0,0 +1,4 @@ |
|||
from . import statement_common |
|||
from . import activity_statement_wizard |
|||
from . import outstanding_statement_wizard |
|||
from . import res_config_settings |
@ -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 |
@ -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) |
@ -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() |
@ -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 |
@ -0,0 +1,101 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L. |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
<!-- wizard action on res.partner --> |
|||
<act_window id="activity_statement_wizard_action" |
|||
name="Partner Activity Statement" |
|||
src_model="res.partner" |
|||
res_model="activity.statement.wizard" |
|||
view_type="form" view_mode="form" |
|||
key2="client_action_multi" target="new" |
|||
groups="partner_statement.group_activity_statement"/> |
|||
|
|||
<act_window id="outstanding_statement_wizard_action" |
|||
name="Partner Outstanding Statement" |
|||
src_model="res.partner" |
|||
res_model="outstanding.statement.wizard" |
|||
view_type="form" view_mode="form" |
|||
key2="client_action_multi" target="new" |
|||
groups="partner_statement.group_outstanding_statement"/> |
|||
|
|||
<!-- wizard view --> |
|||
<record id="statement_common_view" model="ir.ui.view"> |
|||
<field name="name">Statement Common Wizard View</field> |
|||
<field name="model">statement.common.wizard</field> |
|||
<field name="arch" type="xml"> |
|||
<form name="Report Options"> |
|||
<div style="text-align:justify" name="info"> |
|||
<label string="Aging details can be shown in the report, expressed in aging |
|||
buckets, so the partner can review how much is open, due or overdue." for=""/> |
|||
</div><hr/> |
|||
<group> |
|||
<group name="main_info"> |
|||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/> |
|||
<label for="account_type"/> |
|||
<field name="account_type" nolabel="1" widget="radio"/> |
|||
</group> |
|||
<group name="aging_report"> |
|||
<field name="show_aging_buckets"/> |
|||
<field name="aging_type" /> |
|||
</group> |
|||
</group> |
|||
|
|||
<group> |
|||
<group name="dates"> |
|||
<field name="date_end"/> |
|||
</group> |
|||
<group name="multiple_partners"> |
|||
<field name="number_partner_ids" readonly="1" invisible="1"/> |
|||
<field name="filter_partners_non_due" attrs="{'invisible': [('number_partner_ids', '=', 1)]}" /> |
|||
<field name="filter_negative_balances" attrs="{'invisible': [('number_partner_ids', '=', 1)]}" /> |
|||
</group> |
|||
</group> |
|||
<footer> |
|||
<button name="button_export_pdf" string="Export PDF" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="outstanding_statement_wizard_view" model="ir.ui.view"> |
|||
<field name="name">Outstanding Statement Wizard</field> |
|||
<field name="model">outstanding.statement.wizard</field> |
|||
<field name="inherit_id" ref="partner_statement.statement_common_view" /> |
|||
<field name="mode">primary</field> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@name='info']/label" position="before" > |
|||
|
|||
<label string="The outstanding statement provides details of all partner's outstanding |
|||
receivables and 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." for=""/> |
|||
<br/><br/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="activity_statement_wizard_view" model="ir.ui.view"> |
|||
<field name="name">Activity Statement Wizard</field> |
|||
<field name="model">activity.statement.wizard</field> |
|||
<field name="inherit_id" ref="partner_statement.statement_common_view" /> |
|||
<field name="mode">primary</field> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@name='info']/label" position="before" > |
|||
<label string="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." for=""/> |
|||
<br/><br/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='date_end']" position="before"> |
|||
<field name="date_start"/> |
|||
</xpath> |
|||
|
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |