From fc58616a78c44d5a6382682100464e717db4809e Mon Sep 17 00:00:00 2001 From: Saran440 Date: Thu, 19 Nov 2020 17:37:45 +0700 Subject: [PATCH 1/8] [IMP] format xlsx to global files --- report_xlsx_helper/report/report_xlsx_abstract.py | 3 +++ report_xlsx_helper/report/report_xlsx_format.py | 1 + 2 files changed, 4 insertions(+) diff --git a/report_xlsx_helper/report/report_xlsx_abstract.py b/report_xlsx_helper/report/report_xlsx_abstract.py index b4eb0dfc..d133952c 100644 --- a/report_xlsx_helper/report/report_xlsx_abstract.py +++ b/report_xlsx_helper/report/report_xlsx_abstract.py @@ -264,6 +264,7 @@ class ReportXlsxAbstract(models.AbstractModel): ) # formats for worksheet table column headers +<<<<<<< HEAD FORMATS["format_theader_grey_left"] = workbook.add_format(theader_grey) FORMATS["format_theader_grey_center"] = workbook.add_format( dict(theader_grey, align="center") @@ -327,6 +328,8 @@ class ReportXlsxAbstract(models.AbstractModel): dict(theader_grey, num_format=int_format_conditional, align="right") ) +======= +>>>>>>> [IMP] format xlsx to global files FORMATS["format_theader_yellow_left"] = workbook.add_format(theader_yellow) FORMATS["format_theader_yellow_center"] = workbook.add_format( dict(theader_yellow, align="center") diff --git a/report_xlsx_helper/report/report_xlsx_format.py b/report_xlsx_helper/report/report_xlsx_format.py index 9e60acab..0ed81f84 100644 --- a/report_xlsx_helper/report/report_xlsx_format.py +++ b/report_xlsx_helper/report/report_xlsx_format.py @@ -162,3 +162,4 @@ FORMATS = { "format_tcell_date_center_bold": False, "format_tcell_date_right_bold": False, } + From 71808f3e3c73ce8efeaeb38ee02d58a469594703 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Mon, 24 Sep 2018 17:29:45 +0200 Subject: [PATCH 2/8] [11.0][MIG] report_xlsx_helper: Migration to 11.0 --- report_xlsx_helper_demo/README.rst | 58 ++++++++++ report_xlsx_helper_demo/__init__.py | 2 + report_xlsx_helper_demo/__manifest__.py | 18 ++++ report_xlsx_helper_demo/models/__init__.py | 1 + report_xlsx_helper_demo/models/res_partner.py | 25 +++++ report_xlsx_helper_demo/report/__init__.py | 1 + .../report/partner_export_xlsx.py | 99 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes report_xlsx_helper_demo/views/res_partner.xml | 19 ++++ 9 files changed, 223 insertions(+) create mode 100644 report_xlsx_helper_demo/README.rst create mode 100644 report_xlsx_helper_demo/__init__.py create mode 100644 report_xlsx_helper_demo/__manifest__.py create mode 100644 report_xlsx_helper_demo/models/__init__.py create mode 100644 report_xlsx_helper_demo/models/res_partner.py create mode 100644 report_xlsx_helper_demo/report/__init__.py create mode 100644 report_xlsx_helper_demo/report/partner_export_xlsx.py create mode 100644 report_xlsx_helper_demo/static/description/icon.png create mode 100644 report_xlsx_helper_demo/views/res_partner.xml diff --git a/report_xlsx_helper_demo/README.rst b/report_xlsx_helper_demo/README.rst new file mode 100644 index 00000000..5730d9db --- /dev/null +++ b/report_xlsx_helper_demo/README.rst @@ -0,0 +1,58 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +================================== +Excel report engine helpers - demo +================================== + +This module demonstrates the capabilities or the report_xlsx_helper module via +a basic example. + +Usage +===== + +Open a partner record and click on the 'Export XLS' button. + +Installation +============ + +There is no specific installation procedure for this module. + +Configuration and 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/143/11.0 + +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. + +Credits +======= + +Contributors +------------ + +* Luc De Meyer + +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 http://odoo-community.org. diff --git a/report_xlsx_helper_demo/__init__.py b/report_xlsx_helper_demo/__init__.py new file mode 100644 index 00000000..bf588bc8 --- /dev/null +++ b/report_xlsx_helper_demo/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report diff --git a/report_xlsx_helper_demo/__manifest__.py b/report_xlsx_helper_demo/__manifest__.py new file mode 100644 index 00000000..c7c05651 --- /dev/null +++ b/report_xlsx_helper_demo/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2009-2018 Noviat. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Report xlsx helpers - demo', + 'author': 'Noviat,' + 'Odoo Community Association (OCA)', + 'category': 'Reporting', + 'version': '11.0.1.0.0', + 'license': 'AGPL-3', + 'depends': [ + 'report_xlsx_helper', + ], + 'data': [ + 'views/res_partner.xml', + ], + 'installable': True, +} diff --git a/report_xlsx_helper_demo/models/__init__.py b/report_xlsx_helper_demo/models/__init__.py new file mode 100644 index 00000000..91fed54d --- /dev/null +++ b/report_xlsx_helper_demo/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/report_xlsx_helper_demo/models/res_partner.py b/report_xlsx_helper_demo/models/res_partner.py new file mode 100644 index 00000000..14fff263 --- /dev/null +++ b/report_xlsx_helper_demo/models/res_partner.py @@ -0,0 +1,25 @@ +# Copyright 2009-2018 Noviat +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.multi + def export_xls(self): + module = __name__.split('addons.')[1].split('.')[0] + report_name = '{}.partner_export_xlsx'.format(module) + report = { + 'type': 'ir.actions.report', + 'report_type': 'xlsx', + 'report_name': report_name, + # model name will be used if no report_file passed via context + 'context': dict(self.env.context, report_file='partner'), + # report_xlsx doesn't pass the context if the data dict is empty + # cf. report_xlsx\static\src\js\report\qwebactionmanager.js + # TODO: create PR on report_xlsx to fix this + 'data': {'dynamic_report': True}, + } + return report diff --git a/report_xlsx_helper_demo/report/__init__.py b/report_xlsx_helper_demo/report/__init__.py new file mode 100644 index 00000000..af555af1 --- /dev/null +++ b/report_xlsx_helper_demo/report/__init__.py @@ -0,0 +1 @@ +from . import partner_export_xlsx diff --git a/report_xlsx_helper_demo/report/partner_export_xlsx.py b/report_xlsx_helper_demo/report/partner_export_xlsx.py new file mode 100644 index 00000000..3ea0c813 --- /dev/null +++ b/report_xlsx_helper_demo/report/partner_export_xlsx.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# Copyright 2009-2018 Noviat. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class PartnerExportXlsx(models.AbstractModel): + _name = 'report.report_xlsx_helper_demo.partner_export_xlsx' + _inherit = 'report.report_xlsx.abstract' + + def _get_ws_params(self, wb, data, partners): + + partner_template = { + 'name': { + 'header': { + 'value': 'Name', + }, + 'data': { + 'value': self._render("partner.name"), + }, + 'width': 20, + }, + 'number_of_contacts': { + 'header': { + 'value': '# Contacts', + }, + 'data': { + 'value': self._render("len(partner.child_ids)"), + }, + 'width': 10, + }, + 'is_customer': { + 'header': { + 'value': 'Customer', + }, + 'data': { + 'value': self._render("partner.customer"), + }, + 'width': 10, + }, + 'is_customer_formula': { + 'header': { + 'value': 'Customer Y/N ?', + }, + 'data': { + 'type': 'formula', + 'value': self._render("customer_formula"), + }, + 'width': 14, + }, + } + + wanted_list = [ + 'name', 'number_of_contacts', 'is_customer', + 'is_customer_formula'] + ws_params = { + 'ws_name': 'Partners', + 'generate_ws_method': '_partner_report', + 'title': 'Partners', + 'wanted_list': wanted_list, + 'col_specs': partner_template, + } + + return [ws_params] + + def _partner_report(self, workbook, ws, ws_params, data, partners): + + ws.set_portrait() + 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 + if len(partners) == 1: + ws_params['title'] = partners.name + 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) + + wl = ws_params['wanted_list'] + + for partner in partners: + is_customer_pos = 'is_customer' in wl and \ + wl.index('is_customer') + is_customer_cell = self._rowcol_to_cell( + row_pos, is_customer_pos) + customer_formula = 'IF({},"Y", "N")'.format(is_customer_cell) + row_pos = self._write_line( + ws, row_pos, ws_params, col_specs_section='data', + render_space={ + 'partner': partner, + 'customer_formula': customer_formula, + }, + default_format=self.format_tcell_left) diff --git a/report_xlsx_helper_demo/static/description/icon.png b/report_xlsx_helper_demo/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/report_xlsx_helper_demo/views/res_partner.xml b/report_xlsx_helper_demo/views/res_partner.xml new file mode 100644 index 00000000..63f46199 --- /dev/null +++ b/report_xlsx_helper_demo/views/res_partner.xml @@ -0,0 +1,19 @@ + + + + + res.partner.test_xlsx + res.partner + + +
+ +
+
+
+ +
From 049d4f689896db1d6c7d93b967b49605e7cd2f62 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 1 Oct 2018 11:02:56 +0000 Subject: [PATCH 3/8] [UPD] Update report_xlsx_helper_demo.pot --- .../i18n/report_xlsx_helper_demo.pot | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot diff --git a/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot new file mode 100644 index 00000000..cf6027de --- /dev/null +++ b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_xlsx_helper_demo +# +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: report_xlsx_helper_demo +#: model:ir.ui.view,arch_db:report_xlsx_helper_demo.view_partner_form +msgid "Export XLS" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model,name:report_xlsx_helper_demo.model_res_partner +msgid "Contact" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx_display_name +msgid "Display Name" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx_id +msgid "ID" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx___last_update +msgid "Last Modified on" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model,name:report_xlsx_helper_demo.model_report_report_xlsx_helper_demo_partner_export_xlsx +msgid "report.report_xlsx_helper_demo.partner_export_xlsx" +msgstr "" + From 8c380d065d43ca9b9dd7f5f1c9e7aa8f6b8bc9c3 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Sun, 21 Apr 2019 21:20:48 +0200 Subject: [PATCH 4/8] [MIG] : Migration to 12.0 --- report_xlsx_helper_demo/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/report_xlsx_helper_demo/__manifest__.py b/report_xlsx_helper_demo/__manifest__.py index c7c05651..d7f3fcd6 100644 --- a/report_xlsx_helper_demo/__manifest__.py +++ b/report_xlsx_helper_demo/__manifest__.py @@ -1,4 +1,4 @@ -# Copyright 2009-2018 Noviat. +# Copyright 2009-2019 Noviat. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { @@ -6,7 +6,7 @@ 'author': 'Noviat,' 'Odoo Community Association (OCA)', 'category': 'Reporting', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'license': 'AGPL-3', 'depends': [ 'report_xlsx_helper', From d3627d740e2bb17bb8aba9d59de97ecfae0628bb Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 3 Jun 2019 11:55:01 +0000 Subject: [PATCH 5/8] [UPD] Update report_xlsx_helper_demo.pot --- .../i18n/report_xlsx_helper_demo.pot | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot index cf6027de..bb125cde 100644 --- a/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot +++ b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,7 +14,7 @@ msgstr "" "Plural-Forms: \n" #. module: report_xlsx_helper_demo -#: model:ir.ui.view,arch_db:report_xlsx_helper_demo.view_partner_form +#: model_terms:ir.ui.view,arch_db:report_xlsx_helper_demo.view_partner_form msgid "Export XLS" msgstr "" @@ -24,17 +24,17 @@ msgid "Contact" msgstr "" #. module: report_xlsx_helper_demo -#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx_display_name +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx__display_name msgid "Display Name" msgstr "" #. module: report_xlsx_helper_demo -#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx_id +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx__id msgid "ID" msgstr "" #. module: report_xlsx_helper_demo -#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx___last_update +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx____last_update msgid "Last Modified on" msgstr "" From 7a84955a37f94ae9d07287d4563b0de9cb594901 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Thu, 8 Aug 2019 20:25:51 +0200 Subject: [PATCH 6/8] greenify --- report_xlsx_helper_demo/report/partner_export_xlsx.py | 1 - 1 file changed, 1 deletion(-) diff --git a/report_xlsx_helper_demo/report/partner_export_xlsx.py b/report_xlsx_helper_demo/report/partner_export_xlsx.py index 3ea0c813..c9cd55ab 100644 --- a/report_xlsx_helper_demo/report/partner_export_xlsx.py +++ b/report_xlsx_helper_demo/report/partner_export_xlsx.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2009-2018 Noviat. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). From 0c37ba0c24b761540b9205ebec7905e52df0cc49 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 1 Oct 2019 05:50:06 +0000 Subject: [PATCH 7/8] report_xlsx_helper_demo 12.0.1.1.0 --- report_xlsx_helper_demo/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report_xlsx_helper_demo/__manifest__.py b/report_xlsx_helper_demo/__manifest__.py index d7f3fcd6..60c07e20 100644 --- a/report_xlsx_helper_demo/__manifest__.py +++ b/report_xlsx_helper_demo/__manifest__.py @@ -6,7 +6,7 @@ 'author': 'Noviat,' 'Odoo Community Association (OCA)', 'category': 'Reporting', - 'version': '12.0.1.0.0', + 'version': '12.0.1.1.0', 'license': 'AGPL-3', 'depends': [ 'report_xlsx_helper', From 5f746468d49537356b2120d085ce63d5cf145628 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Wed, 25 Nov 2020 12:56:20 -0800 Subject: [PATCH 8/8] [MIG] report_xlsx_helper_demo: Migration to 14.0 --- .../report/report_xlsx_abstract.py | 3 - .../report/report_xlsx_format.py | 1 - report_xlsx_helper_demo/__manifest__.py | 24 ++-- report_xlsx_helper_demo/models/res_partner.py | 21 ++-- .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + report_xlsx_helper_demo/readme/INSTALL.rst | 1 + report_xlsx_helper_demo/readme/USAGE.rst | 1 + .../report/partner_export_xlsx.py | 112 ++++++++++-------- report_xlsx_helper_demo/views/res_partner.xml | 11 +- .../odoo/addons/report_xlsx_helper_demo | 1 + setup/report_xlsx_helper_demo/setup.py | 6 + 12 files changed, 103 insertions(+), 81 deletions(-) create mode 100644 report_xlsx_helper_demo/readme/CONTRIBUTORS.rst create mode 100644 report_xlsx_helper_demo/readme/DESCRIPTION.rst create mode 100644 report_xlsx_helper_demo/readme/INSTALL.rst create mode 100644 report_xlsx_helper_demo/readme/USAGE.rst create mode 120000 setup/report_xlsx_helper_demo/odoo/addons/report_xlsx_helper_demo create mode 100644 setup/report_xlsx_helper_demo/setup.py diff --git a/report_xlsx_helper/report/report_xlsx_abstract.py b/report_xlsx_helper/report/report_xlsx_abstract.py index d133952c..b4eb0dfc 100644 --- a/report_xlsx_helper/report/report_xlsx_abstract.py +++ b/report_xlsx_helper/report/report_xlsx_abstract.py @@ -264,7 +264,6 @@ class ReportXlsxAbstract(models.AbstractModel): ) # formats for worksheet table column headers -<<<<<<< HEAD FORMATS["format_theader_grey_left"] = workbook.add_format(theader_grey) FORMATS["format_theader_grey_center"] = workbook.add_format( dict(theader_grey, align="center") @@ -328,8 +327,6 @@ class ReportXlsxAbstract(models.AbstractModel): dict(theader_grey, num_format=int_format_conditional, align="right") ) -======= ->>>>>>> [IMP] format xlsx to global files FORMATS["format_theader_yellow_left"] = workbook.add_format(theader_yellow) FORMATS["format_theader_yellow_center"] = workbook.add_format( dict(theader_yellow, align="center") diff --git a/report_xlsx_helper/report/report_xlsx_format.py b/report_xlsx_helper/report/report_xlsx_format.py index 0ed81f84..9e60acab 100644 --- a/report_xlsx_helper/report/report_xlsx_format.py +++ b/report_xlsx_helper/report/report_xlsx_format.py @@ -162,4 +162,3 @@ FORMATS = { "format_tcell_date_center_bold": False, "format_tcell_date_right_bold": False, } - diff --git a/report_xlsx_helper_demo/__manifest__.py b/report_xlsx_helper_demo/__manifest__.py index 60c07e20..67329cf6 100644 --- a/report_xlsx_helper_demo/__manifest__.py +++ b/report_xlsx_helper_demo/__manifest__.py @@ -1,18 +1,18 @@ -# Copyright 2009-2019 Noviat. +# Copyright 2009-2020 Noviat. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Report xlsx helpers - demo', - 'author': 'Noviat,' - 'Odoo Community Association (OCA)', - 'category': 'Reporting', - 'version': '12.0.1.1.0', - 'license': 'AGPL-3', - 'depends': [ - 'report_xlsx_helper', + "name": "Report xlsx helpers - demo", + "author": "Noviat, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/reporting-engine", + "category": "Reporting", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "depends": [ + "report_xlsx_helper", ], - 'data': [ - 'views/res_partner.xml', + "data": [ + "views/res_partner.xml", ], - 'installable': True, + "installable": True, } diff --git a/report_xlsx_helper_demo/models/res_partner.py b/report_xlsx_helper_demo/models/res_partner.py index 14fff263..6e4d2b1c 100644 --- a/report_xlsx_helper_demo/models/res_partner.py +++ b/report_xlsx_helper_demo/models/res_partner.py @@ -1,25 +1,24 @@ -# Copyright 2009-2018 Noviat +# Copyright 2009-2020 Noviat # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, models +from odoo import models class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" - @api.multi def export_xls(self): - module = __name__.split('addons.')[1].split('.')[0] - report_name = '{}.partner_export_xlsx'.format(module) + module = __name__.split("addons.")[1].split(".")[0] + report_name = "{}.partner_export_xlsx".format(module) report = { - 'type': 'ir.actions.report', - 'report_type': 'xlsx', - 'report_name': report_name, + "type": "ir.actions.report", + "report_type": "xlsx", + "report_name": report_name, # model name will be used if no report_file passed via context - 'context': dict(self.env.context, report_file='partner'), + "context": dict(self.env.context, report_file="partner"), # report_xlsx doesn't pass the context if the data dict is empty # cf. report_xlsx\static\src\js\report\qwebactionmanager.js # TODO: create PR on report_xlsx to fix this - 'data': {'dynamic_report': True}, + "data": {"dynamic_report": True}, } return report diff --git a/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst b/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..044d1a00 --- /dev/null +++ b/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Luc De Meyer diff --git a/report_xlsx_helper_demo/readme/DESCRIPTION.rst b/report_xlsx_helper_demo/readme/DESCRIPTION.rst new file mode 100644 index 00000000..86f329c2 --- /dev/null +++ b/report_xlsx_helper_demo/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module demonstrates the capabilities or the report_xlsx_helper module via +a basic example. diff --git a/report_xlsx_helper_demo/readme/INSTALL.rst b/report_xlsx_helper_demo/readme/INSTALL.rst new file mode 100644 index 00000000..9d94322d --- /dev/null +++ b/report_xlsx_helper_demo/readme/INSTALL.rst @@ -0,0 +1 @@ +There is no specific installation procedure for this module. diff --git a/report_xlsx_helper_demo/readme/USAGE.rst b/report_xlsx_helper_demo/readme/USAGE.rst new file mode 100644 index 00000000..91a2fd5a --- /dev/null +++ b/report_xlsx_helper_demo/readme/USAGE.rst @@ -0,0 +1 @@ +Open a partner record and click on the 'Export XLS' button. diff --git a/report_xlsx_helper_demo/report/partner_export_xlsx.py b/report_xlsx_helper_demo/report/partner_export_xlsx.py index c9cd55ab..31b44289 100644 --- a/report_xlsx_helper_demo/report/partner_export_xlsx.py +++ b/report_xlsx_helper_demo/report/partner_export_xlsx.py @@ -1,64 +1,68 @@ -# Copyright 2009-2018 Noviat. +# Copyright 2009-2020 Noviat. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import models +from odoo.addons.report_xlsx_helper.report.report_xlsx_format import ( + FORMATS, + XLS_HEADERS, +) + class PartnerExportXlsx(models.AbstractModel): - _name = 'report.report_xlsx_helper_demo.partner_export_xlsx' - _inherit = 'report.report_xlsx.abstract' + _name = "report.report_xlsx_helper_demo.partner_export_xlsx" + _description = "Report xlsx helpers" + _inherit = "report.report_xlsx.abstract" def _get_ws_params(self, wb, data, partners): partner_template = { - 'name': { - 'header': { - 'value': 'Name', + "name": { + "header": { + "value": "Name", }, - 'data': { - 'value': self._render("partner.name"), + "data": { + "value": self._render("partner.name"), }, - 'width': 20, + "width": 20, }, - 'number_of_contacts': { - 'header': { - 'value': '# Contacts', + "number_of_contacts": { + "header": { + "value": "# Contacts", }, - 'data': { - 'value': self._render("len(partner.child_ids)"), + "data": { + "value": self._render("len(partner.child_ids)"), }, - 'width': 10, + "width": 10, }, - 'is_customer': { - 'header': { - 'value': 'Customer', + "is_company": { + "header": { + "value": "Company", }, - 'data': { - 'value': self._render("partner.customer"), + "data": { + "value": self._render("partner.is_company"), }, - 'width': 10, + "width": 10, }, - 'is_customer_formula': { - 'header': { - 'value': 'Customer Y/N ?', + "is_company_formula": { + "header": { + "value": "Company Y/N ?", }, - 'data': { - 'type': 'formula', - 'value': self._render("customer_formula"), + "data": { + "type": "formula", + "value": self._render("company_formula"), }, - 'width': 14, + "width": 14, }, } - wanted_list = [ - 'name', 'number_of_contacts', 'is_customer', - 'is_customer_formula'] + wanted_list = ["name", "number_of_contacts", "is_company", "is_company_formula"] ws_params = { - 'ws_name': 'Partners', - 'generate_ws_method': '_partner_report', - 'title': 'Partners', - 'wanted_list': wanted_list, - 'col_specs': partner_template, + "ws_name": "Partners", + "generate_ws_method": "_partner_report", + "title": "Partners", + "wanted_list": wanted_list, + "col_specs": partner_template, } return [ws_params] @@ -67,32 +71,38 @@ class PartnerExportXlsx(models.AbstractModel): ws.set_portrait() ws.fit_to_pages(1, 0) - ws.set_header(self.xls_headers['standard']) - ws.set_footer(self.xls_footers['standard']) + ws.set_header(XLS_HEADERS["xls_headers"]["standard"]) + ws.set_footer(XLS_HEADERS["xls_footers"]["standard"]) self._set_column_width(ws, ws_params) row_pos = 0 if len(partners) == 1: - ws_params['title'] = partners.name + ws_params["title"] = partners.name 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, + row_pos, + ws_params, + col_specs_section="header", + default_format=FORMATS["format_theader_yellow_left"], + ) ws.freeze_panes(row_pos, 0) - wl = ws_params['wanted_list'] + wl = ws_params["wanted_list"] for partner in partners: - is_customer_pos = 'is_customer' in wl and \ - wl.index('is_customer') - is_customer_cell = self._rowcol_to_cell( - row_pos, is_customer_pos) - customer_formula = 'IF({},"Y", "N")'.format(is_customer_cell) + is_company_pos = "is_company" in wl and wl.index("is_company") + is_company_cell = self._rowcol_to_cell(row_pos, is_company_pos) + company_formula = 'IF({},"Y", "N")'.format(is_company_cell) row_pos = self._write_line( - ws, row_pos, ws_params, col_specs_section='data', + ws, + row_pos, + ws_params, + col_specs_section="data", render_space={ - 'partner': partner, - 'customer_formula': customer_formula, + "partner": partner, + "company_formula": company_formula, }, - default_format=self.format_tcell_left) + default_format=FORMATS["format_tcell_left"], + ) diff --git a/report_xlsx_helper_demo/views/res_partner.xml b/report_xlsx_helper_demo/views/res_partner.xml index 63f46199..981f4b43 100644 --- a/report_xlsx_helper_demo/views/res_partner.xml +++ b/report_xlsx_helper_demo/views/res_partner.xml @@ -1,13 +1,18 @@ - + res.partner.test_xlsx res.partner - +
-