From 4651eb2852b90c0f92fd4f3e32cb5b5c482f36e3 Mon Sep 17 00:00:00 2001 From: David Beal Date: Fri, 26 Jul 2019 13:30:08 +0200 Subject: [PATCH] MIGR v12 account_export_csv --- account_export_csv/README.rst | 78 ++-- account_export_csv/__manifest__.py | 4 +- account_export_csv/readme/CONTRBUTORS.rst | 16 + account_export_csv/readme/DESCRIPTION.rst | 9 + account_export_csv/readme/ROADMAP.rst | 2 + .../static/description/index.html | 426 ++++++++++++++++++ .../tests/test_account_export_csv.py | 1 - .../wizard/account_export_csv.py | 115 +++-- .../wizard/account_export_csv_view.xml | 11 +- 9 files changed, 555 insertions(+), 107 deletions(-) create mode 100644 account_export_csv/readme/CONTRBUTORS.rst create mode 100644 account_export_csv/readme/DESCRIPTION.rst create mode 100644 account_export_csv/readme/ROADMAP.rst create mode 100644 account_export_csv/static/description/index.html diff --git a/account_export_csv/README.rst b/account_export_csv/README.rst index 62c97731..e4d132ac 100644 --- a/account_export_csv/README.rst +++ b/account_export_csv/README.rst @@ -1,11 +1,30 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - ================== Account Export CSV ================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/account_export_csv + :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-account_export_csv + :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| + Add a wizard that allow you to export a csv file based on accounting journal entries @@ -16,61 +35,48 @@ journal entries You can filter by date range -Installation -============ - -This module depends on date_range module in thta can be found in `server-tools `_. +**Table of contents** -Usage -===== - -.. 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/10.0 +.. contents:: + :local: Known issues / Roadmap ====================== + * rearange wizard view with only one button to generate file plus define a selection list to select report type Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smash it by providing detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Camptocamp -Contributors ------------- +Maintainers +~~~~~~~~~~~ -* Yannick Vaucher -* Stéphane Bidoul -* Vincent Renaville -* Alexandre Fayolle -* Guewen Baconnier -* Laetitia Gangloff -* Adrien Peiffer - -Maintainer ----------- +This module is maintained by the OCA. .. 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. +This module is part of the `OCA/account-financial-reporting `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_export_csv/__manifest__.py b/account_export_csv/__manifest__.py index f013918b..a461243c 100644 --- a/account_export_csv/__manifest__.py +++ b/account_export_csv/__manifest__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2013 Camptocamp SA # Copyright 2017 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -6,9 +5,10 @@ { 'name': 'Account Export CSV', 'summary': "Adds accounting CSV export", - 'version': '10.0.1.1.0', + 'version': '12.0.1.1.0', 'depends': [ 'account', + 'date_range', ], 'author': "Camptocamp,Odoo Community Association (OCA)", 'website': 'http://www.camptocamp.com', diff --git a/account_export_csv/readme/CONTRBUTORS.rst b/account_export_csv/readme/CONTRBUTORS.rst new file mode 100644 index 00000000..5f39c61f --- /dev/null +++ b/account_export_csv/readme/CONTRBUTORS.rst @@ -0,0 +1,16 @@ +* Camptocamp + + * Yannick Vaucher + * Alexandre Fayolle + * Vincent Renaville + * Guewen Baconnier + +* Acsone + + * Stéphane Bidoul + * Laetitia Gangloff + * Adrien Peiffer + +* Akretion + + * David Béal diff --git a/account_export_csv/readme/DESCRIPTION.rst b/account_export_csv/readme/DESCRIPTION.rst new file mode 100644 index 00000000..2f682d54 --- /dev/null +++ b/account_export_csv/readme/DESCRIPTION.rst @@ -0,0 +1,9 @@ + +Add a wizard that allow you to export a csv file based on accounting +journal entries + +- Trial Balance +- Analytic Balance (with accounts) +- Journal Entries + +You can filter by date range diff --git a/account_export_csv/readme/ROADMAP.rst b/account_export_csv/readme/ROADMAP.rst new file mode 100644 index 00000000..b5b9cf59 --- /dev/null +++ b/account_export_csv/readme/ROADMAP.rst @@ -0,0 +1,2 @@ + +* rearange wizard view with only one button to generate file plus define a selection list to select report type diff --git a/account_export_csv/static/description/index.html b/account_export_csv/static/description/index.html new file mode 100644 index 00000000..9a7f5f99 --- /dev/null +++ b/account_export_csv/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Account Export CSV + + + +
+

Account Export CSV

+ + +

Beta License: AGPL-3 OCA/account-financial-reporting Translate me on Weblate Try me on Runbot

+

Add a wizard that allow you to export a csv file based on accounting +journal entries

+
    +
  • Trial Balance
  • +
  • Analytic Balance (with accounts)
  • +
  • Journal Entries
  • +
+

You can filter by date range

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • rearange wizard view with only one button to generate file plus define a selection list to select report type
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/account-financial-reporting project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_export_csv/tests/test_account_export_csv.py b/account_export_csv/tests/test_account_export_csv.py index 18bbcf30..92ed402b 100644 --- a/account_export_csv/tests/test_account_export_csv.py +++ b/account_export_csv/tests/test_account_export_csv.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/account_export_csv/wizard/account_export_csv.py b/account_export_csv/wizard/account_export_csv.py index 23dadd81..1433cde9 100644 --- a/account_export_csv/wizard/account_export_csv.py +++ b/account_export_csv/wizard/account_export_csv.py @@ -1,11 +1,10 @@ -# -*- coding: utf-8 -*- # Copyright 2013 Camptocamp SA # Copyright 2017 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import itertools import tempfile -from cStringIO import StringIO +from io import StringIO, BytesIO import base64 import csv @@ -14,7 +13,7 @@ import codecs from odoo import api, fields, models, _ -class AccountUnicodeWriter(object): +class AccountingWriter(object): """ A CSV writer which will write rows to CSV file "f", @@ -31,16 +30,11 @@ class AccountUnicodeWriter(object): def writerow(self, row): # we ensure that we do not try to encode none or bool - row = (x or u'' for x in row) - - encoded_row = [ - c.encode("utf-8") if isinstance(c, unicode) else c for c in row] - - self.writer.writerow(encoded_row) + row = (x or '' for x in row) + self.writer.writerow(row) # Fetch UTF-8 output from the queue ... data = self.queue.getvalue() - data = data.decode("utf-8") - # ... and reencode it into the target encoding + # ... and reencode it into the target encoding as BytesIO data = self.encoder.encode(data) # write to the target stream self.stream.write(data) @@ -65,12 +59,17 @@ class AccountCSVExport(models.TransientModel): date_range_id = fields.Many2one( comodel_name='date.range', string='Date range') journal_ids = fields.Many2many( - comodel_name='account.journal', relation='rel_wizard_journal', - column1='wizard_id', column2='journal_id', string='Journals', + comodel_name='account.journal', string='Journals', + default=lambda s: s._get_journal_default(), help='If empty, use all journals, only used for journal entries') export_filename = fields.Char( string='Export CSV Filename', size=128, default='account_export.csv') + @api.model + def _get_journal_default(self): + """ Implements your own default """ + return False + @api.model def _get_company_default(self): return self.env.user.company_id @@ -88,13 +87,12 @@ class AccountCSVExport(models.TransientModel): self.date_end != self.date_range_id.date_end: self.date_range_id = False - @api.multi def action_manual_export_account(self): self.ensure_one() - rows = self.get_data("account") - file_data = StringIO() + rows = self._get_data("account") + file_data = BytesIO() try: - writer = AccountUnicodeWriter(file_data) + writer = AccountingWriter(file_data) writer.writerows(rows) file_value = file_data.getvalue() self.write({'data': base64.encodestring(file_value)}) @@ -104,7 +102,6 @@ class AccountCSVExport(models.TransientModel): 'type': 'ir.actions.act_window', 'res_model': 'account.csv.export', 'view_mode': 'form', - 'view_type': 'form', 'res_id': self.id, 'views': [(False, 'form')], 'target': 'new', @@ -112,11 +109,11 @@ class AccountCSVExport(models.TransientModel): def _get_header_account(self): return [ - _(u'CODE'), - _(u'NAME'), - _(u'DEBIT'), - _(u'CREDIT'), - _(u'BALANCE'), + _('CODE'), + _('NAME'), + _('DEBIT'), + _('CREDIT'), + _('BALANCE'), ] def _get_rows_account(self, journal_ids): @@ -146,10 +143,10 @@ class AccountCSVExport(models.TransientModel): def action_manual_export_analytic(self): self.ensure_one() - rows = self.get_data("analytic") - file_data = StringIO() + rows = self._get_data("analytic") + file_data = BytesIO() try: - writer = AccountUnicodeWriter(file_data) + writer = AccountingWriter(file_data) writer.writerows(rows) file_value = file_data.getvalue() self.write({'data': base64.encodestring(file_value)}) @@ -167,13 +164,13 @@ class AccountCSVExport(models.TransientModel): def _get_header_analytic(self): return [ - _(u'ANALYTIC CODE'), - _(u'ANALYTIC NAME'), - _(u'CODE'), - _(u'ACCOUNT NAME'), - _(u'DEBIT'), - _(u'CREDIT'), - _(u'BALANCE'), + _('ANALYTIC CODE'), + _('ANALYTIC NAME'), + _('CODE'), + _('ACCOUNT NAME'), + _('DEBIT'), + _('CREDIT'), + _('BALANCE'), ] def _get_rows_analytic(self, journal_ids): @@ -207,7 +204,7 @@ class AccountCSVExport(models.TransientModel): def action_manual_export_journal_entries(self): """ - Here we use TemporaryFile to avoid full filling the OpenERP worker + Here we use TemporaryFile to avoid full filling the Odoo worker Memory We also write the data to the wizard with SQL query as write seems to use too much memory as well. @@ -220,14 +217,14 @@ class AccountCSVExport(models.TransientModel): To be able to export bigger volume of data, it is advised to set limit_memory_hard to 2097152000 (2 GB) to generate the file and let - OpenERP load it in the wizard when trying to download it. + Odoo load it in the wizard when trying to download it. Tested with up to a generation of 700k entry lines """ self.ensure_one() - rows = self.get_data("journal_entries") + rows = self._get_data("journal_entries") with tempfile.TemporaryFile() as file_data: - writer = AccountUnicodeWriter(file_data) + writer = AccountingWriter(file_data) writer.writerows(rows) with tempfile.TemporaryFile() as base64_data: file_data.seek(0) @@ -241,7 +238,6 @@ class AccountCSVExport(models.TransientModel): 'type': 'ir.actions.act_window', 'res_model': 'account.csv.export', 'view_mode': 'form', - 'view_type': 'form', 'res_id': self.id, 'views': [(False, 'form')], 'target': 'new', @@ -250,31 +246,30 @@ class AccountCSVExport(models.TransientModel): def _get_header_journal_entries(self): return [ # Standard Sage export fields - _(u'DATE'), - _(u'JOURNAL CODE'), - _(u'ACCOUNT CODE'), - _(u'PARTNER NAME'), - _(u'REF'), - _(u'DESCRIPTION'), - _(u'DEBIT'), - _(u'CREDIT'), - _(u'FULL RECONCILE'), - _(u'ANALYTIC ACCOUNT CODE'), + _('DATE'), + _('JOURNAL CODE'), + _('ACCOUNT CODE'), + _('PARTNER NAME'), + _('REF'), + _('DESCRIPTION'), + _('DEBIT'), + _('CREDIT'), + _('FULL RECONCILE'), + _('ANALYTIC ACCOUNT CODE'), # Other fields - _(u'ENTRY NUMBER'), - _(u'ACCOUNT NAME'), - _(u'BALANCE'), - _(u'AMOUNT CURRENCY'), - _(u'CURRENCY'), - _(u'ANALYTIC ACCOUNT NAME'), - _(u'JOURNAL'), - _(u'TAX CODE'), - _(u'TAX NAME'), - _(u'BANK STATEMENT'), + _('ENTRY NUMBER'), + _('ACCOUNT NAME'), + _('BALANCE'), + _('AMOUNT CURRENCY'), + _('CURRENCY'), + _('ANALYTIC ACCOUNT NAME'), + _('JOURNAL'), + _('TAX CODE'), + _('TAX NAME'), + _('BANK STATEMENT'), ] - @api.multi def _get_rows_journal_entries(self, journal_ids): """ Create a generator of rows of the CSV file @@ -339,7 +334,7 @@ class AccountCSVExport(models.TransientModel): for row in rows: yield row - def get_data(self, result_type): + def _get_data(self, result_type): self.ensure_one() get_header_func = getattr( self, ("_get_header_%s" % (result_type)), None) diff --git a/account_export_csv/wizard/account_export_csv_view.xml b/account_export_csv/wizard/account_export_csv_view.xml index 9b08395c..d5c7d247 100644 --- a/account_export_csv/wizard/account_export_csv_view.xml +++ b/account_export_csv/wizard/account_export_csv_view.xml @@ -4,15 +4,12 @@ Accounting Entries CSV Export account.csv.export - form
- - @@ -20,7 +17,7 @@ @@ -34,7 +31,7 @@ - +