Hi Odoo developers,
In graph views, the measured fields are shown as floats by default instead of integers. How can I show them as integers?.
For instance, in the CRM module, I have a graph for opportunities which show the expected revenue in the x-axis and the opportunity stage in y.axis. The expected revenue is shown as a float (e.g 60,000.0). How can I show the expected revenue as an integer (e.g 60,000 instead of 60,000.0).
Thanks.
Version Odoo: Odoo 8
OS: Ubuntu 14.04
EDIT:
Here is my own example.
The Session model:
class Session(models.Model):
_name = 'openacademy.session'
name = fields.Char(required=True)
start_date = fields.Date(default=fields.Date.today())
end_date = fields.Date(string="End Date", store=True,
compute='_get_end_date', inverse='_set_end_date')
duration = fields.Float(digits=(3, 0), help="Duración en días")
seats = fields.Integer(string="Seats")
percent_taken_seats = fields.Float(string='Percentage of taken seats', compute='_taken_seats_percentage')
instructor_id = fields.Many2one('res.partner', ondelete='set null',
domain=['|', ('instructor', '=', True),
('category_id.name', 'ilike', 'Teacher')])
course_id = fields.Many2one('openacademy.course', ondelete='cascade')
attendees = fields.Many2many('res.partner', string='Attendees')
num_of_attendees = fields.Integer(string="Number of attendees", compute="_get_num_attendees", store=True)
active = fields.Boolean(default=True)
hours = fields.Integer(string="Duration in hours", compute='_get_hours')
color = fields.Integer()
...
@api.one @api.depends('attendees') def _get_num_attendees(self): self.num_of_attendees = len(self.attendees)
Part of the view:
<record model="ir.ui.view" id="session_graph_view">
<field name="name">session.graph</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<graph string="Session graph" type="bar">
<field name="course_id"/>
<field name="num_of_attendees" type="measure"/>
<field name="duration" type="measure"/>
</graph>
</field>
</record>
Although the 'num_of_attendees' is a integer field in Session model, in the graph view it is shown as a float number. For instance, instead of showing 60 attendees (num_of_attendees=60), 60.00 is shown in the bar graph.
Just curious, why don't you convert all the numbers to integers for the graphs in place as doubles? Or do you absolutely need double's everywhere?
@Yenthe, about the CRM incorporated in Odoo by default, I don't know where I should realize the conversion from float to integer for the 'expected revenue' field. Anyway, I suspect that some kind of conversion to float is realized from the client side (in JavaScript). I say this because I have built a test module where I have a computed integer field (named num_of_attendees) in a module name Session (a course session), and this field is shown like a decimal in a graph view. class Session(models.Model): _name = 'openacademy.session' num_of_attendees = fields.Integer(string="Number of attendees", compute="_get_num_attendees", store=True) attendees = fields.Many2many('res.partner', string='Attendees') @api.one @api.depends('attendees') def _get_num_attendees(self): self.num_of_attendees = len(self.attendees) session.graph openacademy.session
@Eduardo the field 'expected revenue' can be found in the CRM module in your Python file (see https://github.com/odoo/odoo/blob/b74d830eb299c6d672c58f3b53410dde37608a5f/addons/crm/report/crm_lead_report.py#L53). You could *try* to change this to an integer in place of a float, but only do this on a test server because I'm not sure if the graphs etc absolutely need a double or not!
Thank you for your help @Yenth. I would prefer not to modify the core of the CRM module. But the problem is not only in CRM module. I have edited my original post to present my own example.