diff --git a/account_move_line_report_xls/README.rst b/account_move_line_report_xls/README.rst new file mode 100644 index 00000000..5a1c9f20 --- /dev/null +++ b/account_move_line_report_xls/README.rst @@ -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. diff --git a/account_move_line_report_xls/__init__.py b/account_move_line_report_xls/__init__.py new file mode 100644 index 00000000..020337dd --- /dev/null +++ b/account_move_line_report_xls/__init__.py @@ -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""" + ) diff --git a/account_move_line_report_xls/__manifest__.py b/account_move_line_report_xls/__manifest__.py new file mode 100644 index 00000000..67f38a10 --- /dev/null +++ b/account_move_line_report_xls/__manifest__.py @@ -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, +} diff --git a/account_move_line_report_xls/i18n/fr.po b/account_move_line_report_xls/i18n/fr.po new file mode 100644 index 00000000..0e8e8639 --- /dev/null +++ b/account_move_line_report_xls/i18n/fr.po @@ -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." + diff --git a/account_move_line_report_xls/i18n/nl.po b/account_move_line_report_xls/i18n/nl.po new file mode 100644 index 00000000..fed06d5c --- /dev/null +++ b/account_move_line_report_xls/i18n/nl.po @@ -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." + diff --git a/account_move_line_report_xls/models/__init__.py b/account_move_line_report_xls/models/__init__.py new file mode 100644 index 00000000..8795b3be --- /dev/null +++ b/account_move_line_report_xls/models/__init__.py @@ -0,0 +1 @@ +from . import account_move_line diff --git a/account_move_line_report_xls/models/account_move_line.py b/account_move_line_report_xls/models/account_move_line.py new file mode 100644 index 00000000..9f3ab2cf --- /dev/null +++ b/account_move_line_report_xls/models/account_move_line.py @@ -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 {} diff --git a/account_move_line_report_xls/readme/CONTRIBUTORS.rst b/account_move_line_report_xls/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..044d1a00 --- /dev/null +++ b/account_move_line_report_xls/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Luc De Meyer diff --git a/account_move_line_report_xls/readme/DESCRIPTION.rst b/account_move_line_report_xls/readme/DESCRIPTION.rst new file mode 100644 index 00000000..d342869c --- /dev/null +++ b/account_move_line_report_xls/readme/DESCRIPTION.rst @@ -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. diff --git a/account_move_line_report_xls/readme/USAGE.rst b/account_move_line_report_xls/readme/USAGE.rst new file mode 100644 index 00000000..801143bb --- /dev/null +++ b/account_move_line_report_xls/readme/USAGE.rst @@ -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. diff --git a/account_move_line_report_xls/report/__init__.py b/account_move_line_report_xls/report/__init__.py new file mode 100644 index 00000000..dc9f47cd --- /dev/null +++ b/account_move_line_report_xls/report/__init__.py @@ -0,0 +1 @@ +from . import account_move_line_xlsx diff --git a/account_move_line_report_xls/report/account_move_line_xlsx.py b/account_move_line_report_xls/report/account_move_line_xlsx.py new file mode 100644 index 00000000..8e7b86b1 --- /dev/null +++ b/account_move_line_report_xls/report/account_move_line_xlsx.py @@ -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, + ) diff --git a/account_move_line_report_xls/report/account_move_line_xlsx.xml b/account_move_line_report_xls/report/account_move_line_xlsx.xml new file mode 100644 index 00000000..5bb04f80 --- /dev/null +++ b/account_move_line_report_xls/report/account_move_line_xlsx.xml @@ -0,0 +1,15 @@ + + + + Export Selected Lines + account.move.line + ir.actions.report + action + + account_move_line_report_xls.account_move_line_xlsx + account_move_line + xlsx + + diff --git a/account_move_line_report_xls/static/description/icon.png b/account_move_line_report_xls/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/account_move_line_report_xls/static/description/icon.png differ diff --git a/account_move_line_report_xls/static/description/icon.svg b/account_move_line_report_xls/static/description/icon.svg new file mode 100644 index 00000000..a7a26d09 --- /dev/null +++ b/account_move_line_report_xls/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/account_move_line_report_xls/tests/__init__.py b/account_move_line_report_xls/tests/__init__.py new file mode 100644 index 00000000..f1626769 --- /dev/null +++ b/account_move_line_report_xls/tests/__init__.py @@ -0,0 +1 @@ +from . import test_aml_report_xlsx diff --git a/account_move_line_report_xls/tests/test_aml_report_xlsx.py b/account_move_line_report_xls/tests/test_aml_report_xlsx.py new file mode 100644 index 00000000..711e0dfc --- /dev/null +++ b/account_move_line_report_xls/tests/test_aml_report_xlsx.py @@ -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") diff --git a/setup/account_move_line_report_xls/odoo/addons/account_move_line_report_xls b/setup/account_move_line_report_xls/odoo/addons/account_move_line_report_xls new file mode 120000 index 00000000..72667032 --- /dev/null +++ b/setup/account_move_line_report_xls/odoo/addons/account_move_line_report_xls @@ -0,0 +1 @@ +../../../../account_move_line_report_xls \ No newline at end of file diff --git a/setup/account_move_line_report_xls/setup.py b/setup/account_move_line_report_xls/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/account_move_line_report_xls/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)