diff --git a/privacy_partner_report/README.rst b/privacy_partner_report/README.rst index cb09b85..9f47c99 100644 --- a/privacy_partner_report/README.rst +++ b/privacy_partner_report/README.rst @@ -1,14 +1,37 @@ -.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png - :target: https://www.gnu.org/licenses/agpl - :alt: License: AGPL-3 - ====================== Privacy Partner Report ====================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fdata--protection-lightgray.png?logo=github + :target: https://github.com/OCA/data-protection/tree/11.0/privacy_partner_report + :alt: OCA/data-protection +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy_partner_report + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/263/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module helps a company to identify all the transactions that a specific partner is involved in, with the possibility to export the associated data. +**Table of contents** + +.. contents:: + :local: Usage ===== @@ -19,49 +42,50 @@ To use this module, you need to: #. Select a partner, and then wait some seconds until a list of models appear. #. Click on ``Export XLSX``. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/263/11.0 - -Known issues / Roadmap -====================== - -* Remove controller workaround if https://github.com/odoo/odoo/pull/24964 is merged. - 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 `_. +* Eficent Contributors ------------- +~~~~~~~~~~~~ * Miquel Raïch -Do not contact contributors directly about support or help with technical issues. +Maintainers +~~~~~~~~~~~ -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. +.. |maintainer-mreficent| image:: https://github.com/mreficent.png?size=40px + :target: https://github.com/mreficent + :alt: mreficent + +Current `maintainer `__: + +|maintainer-mreficent| + +This module is part of the `OCA/data-protection `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/privacy_partner_report/__init__.py b/privacy_partner_report/__init__.py index 807584d..c4e388b 100644 --- a/privacy_partner_report/__init__.py +++ b/privacy_partner_report/__init__.py @@ -1,3 +1,2 @@ -from . import controllers from . import report from . import wizard diff --git a/privacy_partner_report/controllers/__init__.py b/privacy_partner_report/controllers/__init__.py deleted file mode 100644 index 8424b1e..0000000 --- a/privacy_partner_report/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# from . import main diff --git a/privacy_partner_report/controllers/main.py b/privacy_partner_report/controllers/main.py deleted file mode 100644 index 13b6c5a..0000000 --- a/privacy_partner_report/controllers/main.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2018 Eficent Business and IT Consulting Services, S.L. -# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). - -import json -from odoo import http - -from odoo.addons.web.controllers.main import serialize_exception -from odoo.addons.web.controllers.main import Reports - - -class ReportsExtended(Reports): - # HACK of https://github.com/odoo/odoo/pull/24964 - - @http.route() - @serialize_exception - def index(self, action, token): - action = json.loads(action) - if "data" in action.keys() and action["data"]: - action["datas"] = action["data"] - action = json.dumps(action) - return super(ReportsExtended, self).index(action, token) diff --git a/privacy_partner_report/readme/ROADMAP.rst b/privacy_partner_report/readme/ROADMAP.rst deleted file mode 100644 index 8f001bc..0000000 --- a/privacy_partner_report/readme/ROADMAP.rst +++ /dev/null @@ -1 +0,0 @@ -* Remove controller workaround if https://github.com/odoo/odoo/pull/24964 is merged. diff --git a/privacy_partner_report/report/privacy_partner_xlsx.py b/privacy_partner_report/report/privacy_partner_xlsx.py index 4ae39eb..48bdc8b 100644 --- a/privacy_partner_report/report/privacy_partner_xlsx.py +++ b/privacy_partner_report/report/privacy_partner_xlsx.py @@ -22,58 +22,62 @@ class ReportPartnerXlsx(models.AbstractModel): return res def generate_xlsx_report(self, workbook, data, objects): - partner = data['form'].get('partner_id', False) - partner = self.env['res.partner'].sudo().browse(partner[0]) - workbook.set_properties({ - 'comments': 'Created with Python and XlsxWriter from Odoo'}) - sheet = workbook.add_worksheet(_('Partner Data')) - sheet.set_landscape() - sheet.fit_to_pages(1, 0) - sheet.set_zoom(75) - sheet.set_column(0, self._search_longest_row(data['tables']), 25) - title_style = workbook.add_format( - {'bold': True, 'bg_color': '#FFFFCC', 'border': 2}) - sheet.set_row(0, None, None, {'collapsed': 1}) - sheet.write_row(1, 0, ["Partner: " + partner.display_name], - title_style) - i = 3 - first_row = i+2 - for table in sorted(data['tables'].keys()): - for model in sorted(data['tables'][table].keys()): - rows = len(data['tables'][table][model]) - if rows: - style = workbook.add_format() - style.set_bold(True) - style.set_border(2) - sheet.write_row(i, 0, [model], style) - i += 1 - j = 0 - for column in data['tables'][table][model][0]: + for o in objects: + report_data = o.compute_data_for_report(data) + partner = report_data['form'].get('partner_id', False) + partner = self.env['res.partner'].sudo().browse(partner[0]) + workbook.set_properties({ + 'comments': 'Created with Python and XlsxWriter from Odoo'}) + sheet = workbook.add_worksheet(_('Partner Data')) + sheet.set_landscape() + sheet.fit_to_pages(1, 0) + sheet.set_zoom(75) + sheet.set_column(0, self._search_longest_row( + report_data['tables']), 25) + title_style = workbook.add_format( + {'bold': True, 'bg_color': '#FFFFCC', 'border': 2}) + sheet.set_row(0, None, None, {'collapsed': 1}) + sheet.write_row(1, 0, ["Partner: " + partner.display_name], + title_style) + i = 3 + first_row = i+2 + for table in sorted(report_data['tables'].keys()): + for model in sorted(report_data['tables'][table].keys()): + rows = len(report_data['tables'][table][model]) + if rows: style = workbook.add_format() style.set_bold(True) - if j == 0: - style.set_left(1) - if j == len(data['tables'][table][model][0]) - 1: - style.set_right(1) - style.set_top(1) - style.set_bottom(1) - sheet.write_row(i, j, [column], style) - j += 1 - for row in data['tables'][table][model]: + style.set_border(2) + sheet.write_row(i, 0, [model], style) i += 1 j = 0 - for column in row: + for column in report_data['tables'][table][model][0]: style = workbook.add_format() + style.set_bold(True) if j == 0: style.set_left(1) - if j == len(row) - 1: + if j == len(report_data['tables'][ + table][model][0]) - 1: style.set_right(1) - if i == rows + first_row - 1: - style.set_bottom(1) - if row[column]: - sheet.write_row(i, j, [row[column]], style) - else: - sheet.write_row(i, j, [''], style) + style.set_top(1) + style.set_bottom(1) + sheet.write_row(i, j, [column], style) j += 1 - i += 2 - first_row = i+2 + for row in report_data['tables'][table][model]: + i += 1 + j = 0 + for column in row: + style = workbook.add_format() + if j == 0: + style.set_left(1) + if j == len(row) - 1: + style.set_right(1) + if i == rows + first_row - 1: + style.set_bottom(1) + if row[column]: + sheet.write_row(i, j, [row[column]], style) + else: + sheet.write_row(i, j, [''], style) + j += 1 + i += 2 + first_row = i+2 diff --git a/privacy_partner_report/static/description/index.html b/privacy_partner_report/static/description/index.html new file mode 100644 index 0000000..bf964aa --- /dev/null +++ b/privacy_partner_report/static/description/index.html @@ -0,0 +1,432 @@ + + + + + + +Privacy Partner Report + + + +
+

Privacy Partner Report

+ + +

Beta License: AGPL-3 OCA/data-protection Translate me on Weblate Try me on Runbot

+

This module helps a company to identify all the transactions that a specific +partner is involved in, with the possibility to export the associated data.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to menu of Privacy > Reports > Partner Report.
  2. +
  3. Select a partner, and then wait some seconds until a list of models appear.
  4. +
  5. Click on Export XLSX.
  6. +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Eficent
  • +
+
+
+

Contributors

+ +
+
+

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.

+

Current maintainer:

+

mreficent

+

This module is part of the OCA/data-protection project on GitHub.

+

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

+
+
+
+ + diff --git a/privacy_partner_report/wizard/privacy_report_partner.py b/privacy_partner_report/wizard/privacy_report_partner.py index 6148a3c..62258d4 100644 --- a/privacy_partner_report/wizard/privacy_report_partner.py +++ b/privacy_partner_report/wizard/privacy_report_partner.py @@ -62,6 +62,8 @@ class PrivacyPartnerReport(models.TransientModel): @api.multi def button_export_xlsx(self): self.ensure_one() + if not self.table_ids: + raise UserError(_('No data for this partner.')) return self.check_report(xlsx_report=True) def _build_contexts(self, data): @@ -88,8 +90,7 @@ class PrivacyPartnerReport(models.TransientModel): comodel = self.env[model]._fields[key].comodel_name if value: record = self.env[comodel].sudo().browse(value) - cleaned_rows[i][label] = \ - record.display_name.encode('utf8') + cleaned_rows[i][label] = record.display_name else: cleaned_rows[i][label] = rows[i][key] elif 'binary' == self.env[model]._fields[key].type: @@ -209,11 +210,10 @@ class PrivacyPartnerReport(models.TransientModel): def _print_report(self, data, xlsx_report=False): records = self.env[data['model']].sudo().browse(data.get('ids', [])) - processed_data = self.compute_data_for_report(data) if xlsx_report: return self.env.ref('privacy_partner_report.report_partner_xlsx').\ with_context(landscape=True).report_action( - records, data=processed_data) + records, data=data) class PrivacyPartnerData(models.TransientModel):