parent
234ddac450
commit
0b3614bc38
|
@ -0,0 +1,49 @@
|
||||||
|
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
||||||
|
:target: https://www.gnu.org/licenses/agpl
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
|
||||||
|
==========================
|
||||||
|
Journal Items Excel Export
|
||||||
|
==========================
|
||||||
|
|
||||||
|
This module extends the functionality of the journal items
|
||||||
|
('account.move.line') list view and allow you to export the selected lines.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
To install this module, you need also the **report_xlsx_helper**
|
||||||
|
module located in:
|
||||||
|
|
||||||
|
https://github.com/OCA/reporting-engine
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
To use this module, you need to:
|
||||||
|
|
||||||
|
* go to the list view of the journal items
|
||||||
|
* select the lines you wish to export
|
||||||
|
* click on the button on top to export
|
||||||
|
|
||||||
|
The Excel export can be tailored to your exact needs via the following methods
|
||||||
|
of the 'account.move.line' object:
|
||||||
|
|
||||||
|
* **_report_xlsx_fields**
|
||||||
|
|
||||||
|
Add/drop columns or change order from the list of columns that are defined
|
||||||
|
in the Excel template.
|
||||||
|
|
||||||
|
The following fields are defined in the Excel template:
|
||||||
|
|
||||||
|
move, name, date, journal, period, partner, account,
|
||||||
|
date_maturity, debit, credit, balance,
|
||||||
|
reconcile, reconcile_partial, analytic_account,
|
||||||
|
ref, partner_ref, tax_code, tax_amount, amount_residual,
|
||||||
|
amount_currency, currency_name, company_currency,
|
||||||
|
amount_residual_currency, product, product_ref', product_uom, quantity,
|
||||||
|
statement, invoice, narration, blocked
|
||||||
|
|
||||||
|
* **_report_xlsx_template**
|
||||||
|
|
||||||
|
Change/extend the Excel template.
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
try:
|
||||||
|
from . import report
|
||||||
|
except ImportError:
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.getLogger("odoo.module").warning(
|
||||||
|
"""report_xlsx_helper not available in addons path.
|
||||||
|
account_move_line_report_xls will not be usable"""
|
||||||
|
)
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Copyright 2009-2020 Noviat.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Account Move Line XLSX export",
|
||||||
|
"version": "13.0.1.0.0",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"author": "Noviat, Odoo Community Association (OCA)",
|
||||||
|
"category": "Accounting & Finance",
|
||||||
|
"website": "https://github.com/OCA/account-financial-reporting",
|
||||||
|
"summary": "Journal Items Excel export",
|
||||||
|
"depends": ["account", "report_xlsx_helper"],
|
||||||
|
"data": ["report/account_move_line_xlsx.xml"],
|
||||||
|
"installable": True,
|
||||||
|
}
|
|
@ -0,0 +1,181 @@
|
||||||
|
# French translation of Odoo.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * account_move_line_report_xls
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 8.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: support@noviat.com\n"
|
||||||
|
"POT-Creation-Date: 2016-05-16 12:31:16.568000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-16 12:31:16.568000\n"
|
||||||
|
"Last-Translator: Luc De Meyer (Noviat nv/sa)\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Journal Items"
|
||||||
|
msgstr "Écritures comptables"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Entry"
|
||||||
|
msgstr "Écriture"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nom"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Reference"
|
||||||
|
msgstr "Référence"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Effective Date"
|
||||||
|
msgstr "Date"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Period"
|
||||||
|
msgstr "Période"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Partner"
|
||||||
|
msgstr "Partenaire"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Partner Reference"
|
||||||
|
msgstr "Réf. Partenaire"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Account"
|
||||||
|
msgstr "Compte"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Maturity Date"
|
||||||
|
msgstr "Date d'échéance"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Debit"
|
||||||
|
msgstr "Débit"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Credit"
|
||||||
|
msgstr "Crédit"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Balance"
|
||||||
|
msgstr "Solde"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Rec."
|
||||||
|
msgstr "Let."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Part. Rec."
|
||||||
|
msgstr "Let. Part."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Tax Code"
|
||||||
|
msgstr "Case TVA"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Tax/Base Amount"
|
||||||
|
msgstr "Montant TVA/Base"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Am. Currency"
|
||||||
|
msgstr "Montant devise"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Curr."
|
||||||
|
msgstr "Dev."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Journal"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Comp. Curr."
|
||||||
|
msgstr "Dev. Soc."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Analytic Account"
|
||||||
|
msgstr "Compte analytique"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Analytic Account Reference"
|
||||||
|
msgstr "Référence compte analytique"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "Article"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Product Reference"
|
||||||
|
msgstr "Réf. Article"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Unit of Measure"
|
||||||
|
msgstr "Unité de mesure"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Qty"
|
||||||
|
msgstr "Qty"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Statement"
|
||||||
|
msgstr "Relevé"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Invoice"
|
||||||
|
msgstr "Facture"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Residual Amount"
|
||||||
|
msgstr "Montant résiduel"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Res. Am. in Curr."
|
||||||
|
msgstr "Montant résiduel en dev."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Notes"
|
||||||
|
msgstr "Notes"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Lit."
|
||||||
|
msgstr "Lit."
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
# Dutch translation of Odoo.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * account_move_line_report_xls
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 8.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: support@noviat.com\n"
|
||||||
|
"POT-Creation-Date: 2016-05-16 12:31:16.564000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-16 12:31:16.564000\n"
|
||||||
|
"Last-Translator: Luc De Meyer (Noviat nv/sa)\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Journal Items"
|
||||||
|
msgstr "Boekingsregels"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Entry"
|
||||||
|
msgstr "Boeking"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Naam"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Reference"
|
||||||
|
msgstr "Referentie"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Effective Date"
|
||||||
|
msgstr "Datum"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Period"
|
||||||
|
msgstr "Periode"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Partner"
|
||||||
|
msgstr "Partner"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Partner Reference"
|
||||||
|
msgstr "Ref. Partner"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Account"
|
||||||
|
msgstr "Rekening"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Maturity Date"
|
||||||
|
msgstr "Vervaldatum"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Debit"
|
||||||
|
msgstr "Debet"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Credit"
|
||||||
|
msgstr "Credit"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Balance"
|
||||||
|
msgstr "Saldo"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Rec."
|
||||||
|
msgstr "Rec."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Part. Rec."
|
||||||
|
msgstr "Rec. Part."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Tax Code"
|
||||||
|
msgstr "BTW vak"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Tax/Base Amount"
|
||||||
|
msgstr "Bedrag BTW/Mvh"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Am. Currency"
|
||||||
|
msgstr "Bedrag valuta"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Curr."
|
||||||
|
msgstr "Val."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Dagboek"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Comp. Curr."
|
||||||
|
msgstr "Bedr. Val."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Analytic Account"
|
||||||
|
msgstr "Kostenplaats"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Analytic Account Reference"
|
||||||
|
msgstr "Kostenplaats referentie"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "Product"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Product Reference"
|
||||||
|
msgstr "Ref. Product"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Unit of Measure"
|
||||||
|
msgstr "Maateenheid"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Qty"
|
||||||
|
msgstr "HvH"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Statement"
|
||||||
|
msgstr "Uitreksel"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Invoice"
|
||||||
|
msgstr "Factuur"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Residual Amount"
|
||||||
|
msgstr "Restbedrag"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Res. Am. in Curr."
|
||||||
|
msgstr "Restbedrag in val."
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Notes"
|
||||||
|
msgstr "Notities"
|
||||||
|
|
||||||
|
#. module: account_move_line_report_xls
|
||||||
|
#: report:move.line.list.xls:0
|
||||||
|
msgid "Lit."
|
||||||
|
msgstr "Lit."
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
from . import account_move_line
|
|
@ -0,0 +1,60 @@
|
||||||
|
# Copyright 2009-2020 Noviat.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import api, models
|
||||||
|
|
||||||
|
from odoo.addons.report_xlsx_helper.report.report_xlsx_abstract import (
|
||||||
|
ReportXlsxAbstract,
|
||||||
|
)
|
||||||
|
|
||||||
|
_render = ReportXlsxAbstract._render
|
||||||
|
|
||||||
|
|
||||||
|
class AccountMoveLine(models.Model):
|
||||||
|
_inherit = "account.move.line"
|
||||||
|
|
||||||
|
# Change list in custom module e.g. to add/drop columns or change order
|
||||||
|
@api.model
|
||||||
|
def _report_xlsx_fields(self):
|
||||||
|
return [
|
||||||
|
"move",
|
||||||
|
"name",
|
||||||
|
"date",
|
||||||
|
"journal",
|
||||||
|
"partner",
|
||||||
|
"account",
|
||||||
|
"date_maturity",
|
||||||
|
"debit",
|
||||||
|
"credit",
|
||||||
|
"balance",
|
||||||
|
"full_reconcile",
|
||||||
|
"reconcile_amount",
|
||||||
|
# 'analytic_account_name', 'analytic_account',
|
||||||
|
# 'ref', 'partner_ref',
|
||||||
|
# 'amount_residual', 'amount_currency', 'currency_name',
|
||||||
|
# 'company_currency', 'amount_residual_currency',
|
||||||
|
# 'product', 'product_ref', 'product_uom', 'quantity',
|
||||||
|
# 'statement', 'invoice', 'narration', 'blocked',
|
||||||
|
# 'id', 'matched_debit_ids', 'matched_credit_ids',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Change/Add Template entries
|
||||||
|
@api.model
|
||||||
|
def _report_xlsx_template(self):
|
||||||
|
"""
|
||||||
|
Template updates, e.g.
|
||||||
|
|
||||||
|
my_change = {
|
||||||
|
'move': {
|
||||||
|
'header': {
|
||||||
|
'value': 'My Move Title',
|
||||||
|
},
|
||||||
|
'lines': {
|
||||||
|
'value': _render("line.move_id.name or ''"),
|
||||||
|
},
|
||||||
|
'width': 20,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return my_change
|
||||||
|
"""
|
||||||
|
return {}
|
|
@ -0,0 +1 @@
|
||||||
|
* Luc De Meyer <luc.demeyer@noviat.com>
|
|
@ -0,0 +1,2 @@
|
||||||
|
This module extends the functionality of the journal items
|
||||||
|
('account.move.line') list view and allow you to export the selected lines.
|
|
@ -0,0 +1,27 @@
|
||||||
|
To use this module, you need to:
|
||||||
|
|
||||||
|
* go to the list view of the journal items
|
||||||
|
* select the lines you wish to export
|
||||||
|
* click on the button on top to export
|
||||||
|
|
||||||
|
The Excel export can be tailored to your exact needs via the following methods
|
||||||
|
of the 'account.move.line' object:
|
||||||
|
|
||||||
|
* **_report_xlsx_fields**
|
||||||
|
|
||||||
|
Add/drop columns or change order from the list of columns that are defined
|
||||||
|
in the Excel template.
|
||||||
|
|
||||||
|
The following fields are defined in the Excel template:
|
||||||
|
|
||||||
|
move, name, date, journal, period, partner, account,
|
||||||
|
date_maturity, debit, credit, balance,
|
||||||
|
reconcile, reconcile_partial, analytic_account,
|
||||||
|
ref, partner_ref, tax_code, tax_amount, amount_residual,
|
||||||
|
amount_currency, currency_name, company_currency,
|
||||||
|
amount_residual_currency, product, product_ref', product_uom, quantity,
|
||||||
|
statement, invoice, narration, blocked
|
||||||
|
|
||||||
|
* **_report_xlsx_template**
|
||||||
|
|
||||||
|
Change/extend the Excel template.
|
|
@ -0,0 +1 @@
|
||||||
|
from . import account_move_line_xlsx
|
|
@ -0,0 +1,401 @@
|
||||||
|
# Copyright 2009-2020 Noviat
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import models
|
||||||
|
from odoo.tools.translate import translate
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
IR_TRANSLATION_NAME = "move.line.list.xls"
|
||||||
|
|
||||||
|
|
||||||
|
class AccountMoveLineXlsx(models.AbstractModel):
|
||||||
|
_name = "report.account_move_line_report_xls.account_move_line_xlsx"
|
||||||
|
_inherit = "report.report_xlsx.abstract"
|
||||||
|
|
||||||
|
def _(self, src):
|
||||||
|
lang = self.env.context.get("lang", "en_US")
|
||||||
|
val = translate(self.env.cr, IR_TRANSLATION_NAME, "report", lang, src) or src
|
||||||
|
return val
|
||||||
|
|
||||||
|
def _get_ws_params(self, workbook, data, amls):
|
||||||
|
|
||||||
|
# XLSX Template
|
||||||
|
col_specs = {
|
||||||
|
"move": {
|
||||||
|
"header": {"value": self._("Entry")},
|
||||||
|
"lines": {"value": self._render("line.move_id.name")},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"header": {"value": self._("Name")},
|
||||||
|
"lines": {"value": self._render("line.name")},
|
||||||
|
"width": 42,
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"header": {"value": self._("Reference")},
|
||||||
|
"lines": {"value": self._render("line.ref")},
|
||||||
|
"width": 42,
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"header": {"value": self._("Effective Date")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.date"),
|
||||||
|
"format": self.format_tcell_date_left,
|
||||||
|
},
|
||||||
|
"width": 13,
|
||||||
|
},
|
||||||
|
"partner": {
|
||||||
|
"header": {"value": self._("Partner")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.partner_id and line.partner_id.name")
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"partner_ref": {
|
||||||
|
"header": {"value": self._("Partner Reference")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.partner_id and line.partner_id.ref")
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"account": {
|
||||||
|
"header": {"value": self._("Account")},
|
||||||
|
"lines": {"value": self._render("line.account_id.code")},
|
||||||
|
"width": 12,
|
||||||
|
},
|
||||||
|
"date_maturity": {
|
||||||
|
"header": {"value": self._("Maturity Date")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.date_maturity"),
|
||||||
|
"format": self.format_tcell_date_left,
|
||||||
|
},
|
||||||
|
"width": 13,
|
||||||
|
},
|
||||||
|
"debit": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Debit"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.debit"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"totals": {
|
||||||
|
"type": "formula",
|
||||||
|
"value": self._render("debit_formula"),
|
||||||
|
"format": self.format_theader_yellow_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"credit": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Credit"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.credit"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"totals": {
|
||||||
|
"type": "formula",
|
||||||
|
"value": self._render("credit_formula"),
|
||||||
|
"format": self.format_theader_yellow_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"balance": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Balance"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.balance"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"totals": {
|
||||||
|
"type": "formula",
|
||||||
|
"value": self._render("bal_formula"),
|
||||||
|
"format": self.format_theader_yellow_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"full_reconcile": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Rec."),
|
||||||
|
"format": self.format_theader_yellow_center,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.full_reconcile_id " "and line.full_reconcile_id.name"
|
||||||
|
),
|
||||||
|
"format": self.format_tcell_center,
|
||||||
|
},
|
||||||
|
"width": 12,
|
||||||
|
},
|
||||||
|
"reconcile_amount": {
|
||||||
|
"header": {"value": self._("Reconcile Amount")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.full_reconcile_id and line.balance or "
|
||||||
|
"(sum(line.matched_credit_ids.mapped('amount')) - "
|
||||||
|
"sum(line.matched_debit_ids.mapped('amount')))"
|
||||||
|
),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"width": 12,
|
||||||
|
},
|
||||||
|
"matched_debit_ids": {
|
||||||
|
"header": {"value": self._("Matched Debits")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.matched_debit_ids "
|
||||||
|
"and str([x.debit_move_id.id "
|
||||||
|
"for x in line.matched_debit_ids])"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"matched_credit_ids": {
|
||||||
|
"header": {"value": self._("Matched Credits")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.matched_credit_ids "
|
||||||
|
"and str([x.credit_move_id.id "
|
||||||
|
"for x in line.matched_credit_ids])"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"amount_currency": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Am. Currency"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.amount_currency"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"currency_name": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Curr."),
|
||||||
|
"format": self.format_theader_yellow_center,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.currency_id and line.currency_id.name"),
|
||||||
|
"format": self.format_tcell_center,
|
||||||
|
},
|
||||||
|
"width": 6,
|
||||||
|
},
|
||||||
|
"journal": {
|
||||||
|
"header": {"value": self._("Journal")},
|
||||||
|
"lines": {"value": self._render("line.journal_id.code")},
|
||||||
|
"width": 12,
|
||||||
|
},
|
||||||
|
"company_currency": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Comp. Curr."),
|
||||||
|
"format": self.format_theader_yellow_center,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.company_id.currency_id.name"),
|
||||||
|
"format": self.format_tcell_center,
|
||||||
|
},
|
||||||
|
"width": 10,
|
||||||
|
},
|
||||||
|
"analytic_account": {
|
||||||
|
"header": {"value": self._("Analytic Account Reference")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.analytic_account_id " "and line.analytic_account_id.code"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"analytic_account_name": {
|
||||||
|
"header": {"value": self._("Analytic Account")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.analytic_account_id " "and line.analytic_account_id.name"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"product": {
|
||||||
|
"header": {"value": self._("Product")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.product_id and line.product_id.name")
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"product_ref": {
|
||||||
|
"header": {"value": self._("Product Reference")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.product_id and line.product_id.default_code " "or ''"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 36,
|
||||||
|
},
|
||||||
|
"product_uom": {
|
||||||
|
"header": {"value": self._("Unit of Measure")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.product_uom_id and line.product_uom_id.name"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"quantity": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Qty"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.quantity"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"width": 8,
|
||||||
|
},
|
||||||
|
"statement": {
|
||||||
|
"header": {"value": self._("Statement")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render(
|
||||||
|
"line.statement_id and line.statement_id.name"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"invoice": {
|
||||||
|
"header": {"value": self._("Invoice")},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.invoice_id and line.invoice_id.number")
|
||||||
|
},
|
||||||
|
"width": 20,
|
||||||
|
},
|
||||||
|
"amount_residual": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Residual Amount"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.amount_residual"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"amount_residual_currency": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Res. Am. in Curr."),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.amount_residual_currency"),
|
||||||
|
"format": self.format_tcell_amount_right,
|
||||||
|
},
|
||||||
|
"width": 18,
|
||||||
|
},
|
||||||
|
"narration": {
|
||||||
|
"header": {"value": self._("Notes")},
|
||||||
|
"lines": {"value": self._render("line.move_id.narration or ''")},
|
||||||
|
"width": 42,
|
||||||
|
},
|
||||||
|
"blocked": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Lit."),
|
||||||
|
"format": self.format_theader_yellow_center,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.blocked and 'x' or ''"),
|
||||||
|
"format": self.format_tcell_center,
|
||||||
|
},
|
||||||
|
"width": 4,
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"header": {
|
||||||
|
"value": self._("Id"),
|
||||||
|
"format": self.format_theader_yellow_right,
|
||||||
|
},
|
||||||
|
"lines": {
|
||||||
|
"value": self._render("line.id"),
|
||||||
|
"format": self.format_tcell_integer_right,
|
||||||
|
},
|
||||||
|
"width": 12,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
col_specs.update(self.env["account.move.line"]._report_xlsx_template())
|
||||||
|
wanted_list = self.env["account.move.line"]._report_xlsx_fields()
|
||||||
|
title = self._("Journal Items")
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"ws_name": title,
|
||||||
|
"generate_ws_method": "_amls_export",
|
||||||
|
"title": title,
|
||||||
|
"wanted_list": wanted_list,
|
||||||
|
"col_specs": col_specs,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
def _amls_export(self, workbook, ws, ws_params, data, amls):
|
||||||
|
|
||||||
|
ws.set_landscape()
|
||||||
|
ws.fit_to_pages(1, 0)
|
||||||
|
ws.set_header(self.xls_headers["standard"])
|
||||||
|
ws.set_footer(self.xls_footers["standard"])
|
||||||
|
|
||||||
|
self._set_column_width(ws, ws_params)
|
||||||
|
|
||||||
|
row_pos = 0
|
||||||
|
row_pos = self._write_ws_title(ws, row_pos, ws_params)
|
||||||
|
|
||||||
|
row_pos = self._write_line(
|
||||||
|
ws,
|
||||||
|
row_pos,
|
||||||
|
ws_params,
|
||||||
|
col_specs_section="header",
|
||||||
|
default_format=self.format_theader_yellow_left,
|
||||||
|
)
|
||||||
|
|
||||||
|
ws.freeze_panes(row_pos, 0)
|
||||||
|
|
||||||
|
wanted_list = ws_params["wanted_list"]
|
||||||
|
debit_pos = "debit" in wanted_list and wanted_list.index("debit")
|
||||||
|
credit_pos = "credit" in wanted_list and wanted_list.index("credit")
|
||||||
|
|
||||||
|
for line in amls:
|
||||||
|
row_pos = self._write_line(
|
||||||
|
ws,
|
||||||
|
row_pos,
|
||||||
|
ws_params,
|
||||||
|
col_specs_section="lines",
|
||||||
|
render_space={"line": line},
|
||||||
|
default_format=self.format_tcell_left,
|
||||||
|
)
|
||||||
|
|
||||||
|
aml_cnt = len(amls)
|
||||||
|
debit_start = self._rowcol_to_cell(row_pos - aml_cnt, debit_pos)
|
||||||
|
debit_stop = self._rowcol_to_cell(row_pos - 1, debit_pos)
|
||||||
|
debit_formula = "SUM({}:{})".format(debit_start, debit_stop)
|
||||||
|
credit_start = self._rowcol_to_cell(row_pos - aml_cnt, credit_pos)
|
||||||
|
credit_stop = self._rowcol_to_cell(row_pos - 1, credit_pos)
|
||||||
|
credit_formula = "SUM({}:{})".format(credit_start, credit_stop)
|
||||||
|
debit_cell = self._rowcol_to_cell(row_pos, debit_pos)
|
||||||
|
credit_cell = self._rowcol_to_cell(row_pos, credit_pos)
|
||||||
|
bal_formula = debit_cell + "-" + credit_cell
|
||||||
|
row_pos = self._write_line(
|
||||||
|
ws,
|
||||||
|
row_pos,
|
||||||
|
ws_params,
|
||||||
|
col_specs_section="totals",
|
||||||
|
render_space={
|
||||||
|
"debit_formula": debit_formula,
|
||||||
|
"credit_formula": credit_formula,
|
||||||
|
"bal_formula": bal_formula,
|
||||||
|
},
|
||||||
|
default_format=self.format_theader_yellow_left,
|
||||||
|
)
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="action_account_move_line_xlsx" model="ir.actions.report">
|
||||||
|
<field name="name">Export Selected Lines</field>
|
||||||
|
<field name="model">account.move.line</field>
|
||||||
|
<field name="type">ir.actions.report</field>
|
||||||
|
<field name="binding_type">action</field>
|
||||||
|
<field name="binding_model_id" ref="account.model_account_move_line" />
|
||||||
|
<field
|
||||||
|
name="report_name"
|
||||||
|
>account_move_line_report_xls.account_move_line_xlsx</field>
|
||||||
|
<field name="report_file">account_move_line</field>
|
||||||
|
<field name="report_type">xlsx</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 45 KiB |
|
@ -0,0 +1 @@
|
||||||
|
from . import test_aml_report_xlsx
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Copyright 2009-2020 Noviat.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo.tests.common import TransactionCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestAmlReportXlsx(TransactionCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(TestAmlReportXlsx, self).setUp()
|
||||||
|
self.report = self.env.ref(
|
||||||
|
"account_move_line_report_xls.action_account_move_line_xlsx"
|
||||||
|
)
|
||||||
|
sale_journal = self.env["account.journal"].search([("type", "=", "sale")])[0]
|
||||||
|
ar = self.env["account.account"].search([("internal_type", "=", "receivable")])[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
aml_vals = [
|
||||||
|
{"name": "debit", "debit": 100, "account_id": ar.id},
|
||||||
|
{"name": "credit", "credit": 100, "account_id": ar.id},
|
||||||
|
]
|
||||||
|
am = self.env["account.move"].create(
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"journal_id": sale_journal.id,
|
||||||
|
"line_ids": [(0, 0, x) for x in aml_vals],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.amls = am.line_ids
|
||||||
|
|
||||||
|
def test_aml_report_xlsx(self):
|
||||||
|
report_xls = self.report.render_xlsx(self.amls.ids, None)
|
||||||
|
self.assertEqual(report_xls[1], "xlsx")
|
Loading…
Reference in New Issue