forked from Techsystech/web
commit
56f5b19016
|
@ -0,0 +1,84 @@
|
|||
====================================
|
||||
Show percentage (of total) in groups
|
||||
====================================
|
||||
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! 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_group_by_percentage
|
||||
: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_group_by_percentage
|
||||
: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 shows the percentage of the total sum in group by rows.
|
||||
|
||||
.. image:: ../static/description/screenshot.png
|
||||
:alt: Printscreen of percentages in group rows
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
#. Go to any list view;
|
||||
#. group by one or more fields.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/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 <https://github.com/OCA/web/issues/new?body=module:%20web_group_by_percentage%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* Onestein
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Dennis Sluijk <d.sluijk@onestein.nl>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
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 <https://github.com/OCA/web/tree/12.0/web_group_by_percentage>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
'name': 'Show percentage (of total) in groups',
|
||||
'summary': 'Show the percentage of the total sum in group by rows',
|
||||
'author': 'Onestein, Odoo Community Association (OCA)',
|
||||
'development_status': 'Beta',
|
||||
'website': 'https://github.com/OCA/web',
|
||||
'category': 'Web',
|
||||
'license': 'AGPL-3',
|
||||
'version': '12.0.1.0.0',
|
||||
'depends': [
|
||||
'web',
|
||||
],
|
||||
'data': [
|
||||
'templates/assets.xml'
|
||||
],
|
||||
'installable': True,
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
* Dennis Sluijk <d.sluijk@onestein.nl>
|
|
@ -0,0 +1,4 @@
|
|||
This module shows the percentage of the total sum in group by rows.
|
||||
|
||||
.. image:: ../static/description/screenshot.png
|
||||
:alt: Printscreen of percentages in group rows
|
|
@ -0,0 +1,4 @@
|
|||
To use this module, you need to:
|
||||
|
||||
#. Go to any list view;
|
||||
#. group by one or more fields.
|
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
|
@ -0,0 +1,94 @@
|
|||
/* Copyright 2019 Onestein
|
||||
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
|
||||
|
||||
odoo.define('web_group_by_percentage', function (require) {
|
||||
"use strict";
|
||||
|
||||
var ListRenderer = require('web.ListRenderer'),
|
||||
BasicModel = require('web.BasicModel');
|
||||
|
||||
ListRenderer.include({
|
||||
/**
|
||||
* Render the percentage to the group row.
|
||||
*
|
||||
* @override
|
||||
*/
|
||||
_renderGroupRow: function (group) {
|
||||
var self = this;
|
||||
var res = this._super.apply(this, arguments);
|
||||
_.each(group.aggregatePercentages, function (percentage, field) {
|
||||
var cellIndex = _.findIndex(self.columns, function (column) {
|
||||
if (field === column.attrs.name) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
var $cell = $(res.find('td').get(cellIndex - 1));
|
||||
var $b = $('<span>')
|
||||
.addClass('web_group_by_percentage')
|
||||
.html(_.str.sprintf('%s%% ', percentage.toFixed(2)))
|
||||
.data('percentage', percentage);
|
||||
$cell.prepend($b);
|
||||
});
|
||||
return res;
|
||||
},
|
||||
});
|
||||
|
||||
BasicModel.include({
|
||||
/**
|
||||
* Adds aggregatePercentages to the result.
|
||||
*
|
||||
* @override
|
||||
*/
|
||||
get: function () {
|
||||
var result = this._super.apply(this, arguments),
|
||||
dp = result && this.localData[result.id];
|
||||
if (dp) {
|
||||
if (dp.aggregatePercentages) {
|
||||
result.aggregatePercentages = $.extend({}, dp.aggregatePercentages);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Calculate percentages.
|
||||
*
|
||||
* @override
|
||||
*/
|
||||
_readGroup: function () {
|
||||
var self = this,
|
||||
res = this._super.apply(this, arguments);
|
||||
res.done(function (list) {
|
||||
// Calculate totals
|
||||
var sums = {};
|
||||
_.each(list.data, function (groupId) {
|
||||
var group = self.get(groupId);
|
||||
_.each(group.aggregateValues, function (value, field) {
|
||||
if (!(field in sums)) {
|
||||
sums[field] = 0;
|
||||
}
|
||||
sums[field] += value;
|
||||
});
|
||||
});
|
||||
|
||||
// Calculate percentages
|
||||
_.each(list.data, function (groupId) {
|
||||
var group = self.get(groupId),
|
||||
aggregatePercentages = {};
|
||||
_.each(_.keys(sums), function (field) {
|
||||
var percentage = 0;
|
||||
if (sums[field]) {
|
||||
percentage = (group.aggregateValues[field] / sums[field]) * 100;
|
||||
}
|
||||
aggregatePercentages[field] = percentage;
|
||||
});
|
||||
var dp = self.localData[groupId];
|
||||
dp.aggregatePercentages = aggregatePercentages;
|
||||
});
|
||||
return list;
|
||||
});
|
||||
return res;
|
||||
},
|
||||
});
|
||||
});
|
|
@ -0,0 +1,3 @@
|
|||
.web_group_by_percentage {
|
||||
font-weight: bold;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2019 Onestein
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
|
||||
|
||||
<odoo>
|
||||
<template id="assets_backend" inherit_id="web.assets_backend">
|
||||
<xpath expr=".">
|
||||
<script src="/web_group_by_percentage/static/src/js/backend.js"></script>
|
||||
</xpath>
|
||||
<xpath expr="//link[last()]" position="after">
|
||||
<link rel="stylesheet" type="text/scss" href="/web_group_by_percentage/static/src/scss/backend.scss"/>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
Loading…
Reference in New Issue