From 95b01b24ebba667e2e3917fc3374318dbe551d36 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Fri, 9 Nov 2018 17:46:13 +0200 Subject: [PATCH] [MIG] web_widget_x2many_2d_matrix: Migration to 12.0 --- web_widget_x2many_2d_matrix/README.rst | 68 ++- web_widget_x2many_2d_matrix/__init__.py | 20 +- web_widget_x2many_2d_matrix/__manifest__.py | 28 +- .../readme/CONTRIBUTORS.rst | 8 + .../readme/DESCRIPTION.rst | 23 + .../readme/ROADMAP.rst | 14 + web_widget_x2many_2d_matrix/readme/USAGE.rst | 92 +++ .../static/description/index.html | 568 ++++++++++++++++++ web_widget_x2many_2d_matrix/views/assets.xml | 27 +- 9 files changed, 786 insertions(+), 62 deletions(-) create mode 100644 web_widget_x2many_2d_matrix/readme/CONTRIBUTORS.rst create mode 100644 web_widget_x2many_2d_matrix/readme/DESCRIPTION.rst create mode 100644 web_widget_x2many_2d_matrix/readme/ROADMAP.rst create mode 100644 web_widget_x2many_2d_matrix/readme/USAGE.rst create mode 100644 web_widget_x2many_2d_matrix/static/description/index.html diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index e9d10d2aea41..9972ee0e0485 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/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 - =========================== 2D matrix for x2many fields =========================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/12.0/web_widget_x2many_2d_matrix + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_widget_x2many_2d_matrix + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module allows to show an x2many field with 3-tuples ($x_value, $y_value, $value) in a table @@ -30,6 +49,11 @@ The beauty of this is that you have an arbitrary amount of columns with this widget, trying to get this in standard x2many lists involves some quite ugly hacks. +**Table of contents** + +.. contents:: + :local: + Usage ===== @@ -71,10 +95,6 @@ show_column_totals If field_value is a numeric field, it indicates if you want to calculate column totals. True by default -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/11.0 - Example ======= @@ -151,16 +171,25 @@ Known issues / Roadmap 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 a 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 ======= +Authors +~~~~~~~ + +* Therp BV +* Tecnativa +* Camptocamp + Contributors ------------- +~~~~~~~~~~~~ * Holger Brunn * Pedro M. Baeza @@ -169,18 +198,21 @@ Contributors * Timon Tschanz * Jairo Llopis * Dennis Sluijk +* Alexey Pelykh + +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. +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_widget_x2many_2d_matrix/__init__.py b/web_widget_x2many_2d_matrix/__init__.py index 919541c6cab7..ef5ae3587f59 100644 --- a/web_widget_x2many_2d_matrix/__init__.py +++ b/web_widget_x2many_2d_matrix/__init__.py @@ -1,19 +1 @@ -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/web_widget_x2many_2d_matrix/__manifest__.py b/web_widget_x2many_2d_matrix/__manifest__.py index 30d7a730def2..bfee53ec3550 100644 --- a/web_widget_x2many_2d_matrix/__manifest__.py +++ b/web_widget_x2many_2d_matrix/__manifest__.py @@ -3,21 +3,23 @@ # Copyright 2018 Simone Orsi # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": "2D matrix for x2many fields", - "version": "11.0.1.1.1", - "author": "Therp BV, " - "Tecnativa, " - "Camptocamp, " - "Odoo Community Association (OCA)", - "website": "https://github.com/OCA/web", - "license": "AGPL-3", - "category": "Hidden/Dependency", - "summary": "Show list fields as a matrix", - "depends": [ + 'name': '2D matrix for x2many fields', + 'version': '12.0.1.0.0', + 'author': ( + 'Therp BV, ' + 'Tecnativa, ' + 'Camptocamp, ' + 'Odoo Community Association (OCA)' + ), + 'website': 'https://github.com/OCA/web', + 'license': 'AGPL-3', + 'category': 'Hidden/Dependency', + 'summary': 'Show list fields as a matrix', + 'depends': [ 'web', ], - "data": [ + 'data': [ 'views/assets.xml', ], - "installable": True, + 'installable': True, } diff --git a/web_widget_x2many_2d_matrix/readme/CONTRIBUTORS.rst b/web_widget_x2many_2d_matrix/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..f30eb3eb1d53 --- /dev/null +++ b/web_widget_x2many_2d_matrix/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* Holger Brunn +* Pedro M. Baeza +* Artem Kostyuk +* Simone Orsi +* Timon Tschanz +* Jairo Llopis +* Dennis Sluijk +* Alexey Pelykh diff --git a/web_widget_x2many_2d_matrix/readme/DESCRIPTION.rst b/web_widget_x2many_2d_matrix/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..a84da8005ae6 --- /dev/null +++ b/web_widget_x2many_2d_matrix/readme/DESCRIPTION.rst @@ -0,0 +1,23 @@ +This module allows to show an x2many field with 3-tuples +($x_value, $y_value, $value) in a table + ++-----------+-------------+-------------+ +| | $x_value1 | $x_value2 | ++===========+=============+=============+ +| $y_value1 | $value(1/1) | $value(2/1) | ++-----------+-------------+-------------+ +| $y_value2 | $value(1/2) | $value(2/2) | ++-----------+-------------+-------------+ + +where `value(n/n)` is editable. + +An example use case would be: Select some projects and some employees so that +a manager can easily fill in the planned_hours for one task per employee. The +result could look like this: + +.. image:: /web_widget_x2many_2d_matrix/static/description/screenshot.png + :alt: Screenshot + +The beauty of this is that you have an arbitrary amount of columns with this +widget, trying to get this in standard x2many lists involves some quite ugly +hacks. diff --git a/web_widget_x2many_2d_matrix/readme/ROADMAP.rst b/web_widget_x2many_2d_matrix/readme/ROADMAP.rst new file mode 100644 index 000000000000..b5c8e912a898 --- /dev/null +++ b/web_widget_x2many_2d_matrix/readme/ROADMAP.rst @@ -0,0 +1,14 @@ +* Support extra attributes on each field cell via `field_extra_attrs` param. + We could set a cell as not editable, required or readonly for instance. + The `readonly` case will also give the ability + to click on m2o to open related records. + +* Support limit total records in the matrix. Ref: https://github.com/OCA/web/issues/901 + +* Support cell traversal through keyboard arrows. + +* Entering the widget from behind by pressing ``Shift+TAB`` in your keyboard + will enter into the 1st cell until https://github.com/odoo/odoo/pull/26490 + is merged. + +* Support extra invisible fields inside each cell. diff --git a/web_widget_x2many_2d_matrix/readme/USAGE.rst b/web_widget_x2many_2d_matrix/readme/USAGE.rst new file mode 100644 index 000000000000..8716546d49cb --- /dev/null +++ b/web_widget_x2many_2d_matrix/readme/USAGE.rst @@ -0,0 +1,92 @@ +Use this widget by saying:: + + + +This assumes that my_field refers to a model with the fields `x`, `y` and +`value`. If your fields are named differently, pass the correct names as +attributes: + +.. code-block:: xml + + + + + + + + + + +You can pass the following parameters: + +field_x_axis + The field that indicates the x value of a point +field_y_axis + The field that indicates the y value of a point +field_label_x_axis + Use another field to display in the table header +field_label_y_axis + Use another field to display in the table header +field_value + Show this field as value +show_row_totals + If field_value is a numeric field, it indicates if you want to calculate + row totals. True by default +show_column_totals + If field_value is a numeric field, it indicates if you want to calculate + column totals. True by default + +Example +======= + +You need a data structure already filled with values. Let's assume we want to +use this widget in a wizard that lets the user fill in planned hours for one +task per project per user. In this case, we can use ``project.task`` as our +data model and point to it from our wizard. The crucial part is that we fill +the field in the default function: + +.. code-block:: python + + from odoo import fields, models + + class MyWizard(models.TransientModel): + _name = 'my.wizard' + + def _default_task_ids(self): + # your list of project should come from the context, some selection + # in a previous wizard or wherever else + projects = self.env['project.project'].browse([1, 2, 3]) + # same with users + users = self.env['res.users'].browse([1, 2, 3]) + return [ + (0, 0, { + 'name': 'Sample task name', + 'project_id': p.id, + 'user_id': u.id, + 'planned_hours': 0, + 'message_needaction': False, + 'date_deadline': fields.Date.today(), + }) + # if the project doesn't have a task for the user, + # create a new one + if not p.task_ids.filtered(lambda x: x.user_id == u) else + # otherwise, return the task + (4, p.task_ids.filtered(lambda x: x.user_id == u)[0].id) + for p in projects + for u in users + ] + + task_ids = fields.Many2many('project.task', default=_default_task_ids) + +Now in our wizard, we can use: + +.. code-block:: xml + + + + + + + + + diff --git a/web_widget_x2many_2d_matrix/static/description/index.html b/web_widget_x2many_2d_matrix/static/description/index.html new file mode 100644 index 000000000000..8ee519c969bd --- /dev/null +++ b/web_widget_x2many_2d_matrix/static/description/index.html @@ -0,0 +1,568 @@ + + + + + + +2D matrix for x2many fields + + + +
+

2D matrix for x2many fields

+ + +

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

+

This module allows to show an x2many field with 3-tuples +($x_value, $y_value, $value) in a table

+ +++++ + + + + + + + + + + + + + + + + +
 $x_value1$x_value2
$y_value1$value(1/1)$value(2/1)
$y_value2$value(1/2)$value(2/2)
+

where value(n/n) is editable.

+

An example use case would be: Select some projects and some employees so that +a manager can easily fill in the planned_hours for one task per employee. The +result could look like this:

+Screenshot +

The beauty of this is that you have an arbitrary amount of columns with this +widget, trying to get this in standard x2many lists involves some quite ugly +hacks.

+

Table of contents

+ +
+

Usage

+

Use this widget by saying:

+
+<field name="my_field" widget="x2many_2d_matrix" />
+
+

This assumes that my_field refers to a model with the fields x, y and +value. If your fields are named differently, pass the correct names as +attributes:

+
+<field name="my_field" widget="x2many_2d_matrix" field_x_axis="my_field1" field_y_axis="my_field2" field_value="my_field3">
+    <tree>
+        <field name="my_field"/>
+        <field name="my_field1"/>
+        <field name="my_field2"/>
+        <field name="my_field3"/>
+    </tree>
+</field>
+
+

You can pass the following parameters:

+
+
field_x_axis
+
The field that indicates the x value of a point
+
field_y_axis
+
The field that indicates the y value of a point
+
field_label_x_axis
+
Use another field to display in the table header
+
field_label_y_axis
+
Use another field to display in the table header
+
field_value
+
Show this field as value
+
show_row_totals
+
If field_value is a numeric field, it indicates if you want to calculate +row totals. True by default
+
show_column_totals
+
If field_value is a numeric field, it indicates if you want to calculate +column totals. True by default
+
+
+
+

Example

+

You need a data structure already filled with values. Let’s assume we want to +use this widget in a wizard that lets the user fill in planned hours for one +task per project per user. In this case, we can use project.task as our +data model and point to it from our wizard. The crucial part is that we fill +the field in the default function:

+
+from odoo import fields, models
+
+class MyWizard(models.TransientModel):
+    _name = 'my.wizard'
+
+    def _default_task_ids(self):
+        # your list of project should come from the context, some selection
+        # in a previous wizard or wherever else
+        projects = self.env['project.project'].browse([1, 2, 3])
+        # same with users
+        users = self.env['res.users'].browse([1, 2, 3])
+        return [
+            (0, 0, {
+                'name': 'Sample task name',
+                'project_id': p.id,
+                'user_id': u.id,
+                'planned_hours': 0,
+                'message_needaction': False,
+                'date_deadline': fields.Date.today(),
+            })
+            # if the project doesn't have a task for the user,
+            # create a new one
+            if not p.task_ids.filtered(lambda x: x.user_id == u) else
+            # otherwise, return the task
+            (4, p.task_ids.filtered(lambda x: x.user_id == u)[0].id)
+            for p in projects
+            for u in users
+        ]
+
+    task_ids = fields.Many2many('project.task', default=_default_task_ids)
+
+

Now in our wizard, we can use:

+
+<field name="task_ids" widget="x2many_2d_matrix" field_x_axis="project_id" field_y_axis="user_id" field_value="planned_hours">
+    <tree>
+        <field name="task_ids"/>
+        <field name="project_id"/>
+        <field name="user_id"/>
+        <field name="planned_hours"/>
+    </tree>
+</field>
+
+
+
+

Known issues / Roadmap

+
    +
  • Support extra attributes on each field cell via field_extra_attrs param. +We could set a cell as not editable, required or readonly for instance. +The readonly case will also give the ability +to click on m2o to open related records.
  • +
  • Support limit total records in the matrix. Ref: https://github.com/OCA/web/issues/901
  • +
  • Support cell traversal through keyboard arrows.
  • +
  • Entering the widget from behind by pressing Shift+TAB in your keyboard +will enter into the 1st cell until https://github.com/odoo/odoo/pull/26490 +is merged.
  • +
  • Support extra invisible fields inside each cell.
  • +
+
+
+

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

+
    +
  • Therp BV
  • +
  • Tecnativa
  • +
  • Camptocamp
  • +
+
+
+

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.

+

This module is part of the OCA/web project on GitHub.

+

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

+
+
+
+ + diff --git a/web_widget_x2many_2d_matrix/views/assets.xml b/web_widget_x2many_2d_matrix/views/assets.xml index ab1956518d06..6083a642fa0c 100644 --- a/web_widget_x2many_2d_matrix/views/assets.xml +++ b/web_widget_x2many_2d_matrix/views/assets.xml @@ -1,13 +1,16 @@ - - -