Files
external-public-addons/report_carbone/models/base/base.py

46 lines
1.9 KiB
Python

import pytz
from odoo import api, fields, models
class Base(models.AbstractModel):
"""The base model, which is implicitly inherited by all models."""
_inherit = "base"
carbone_default_currency_id = fields.Many2one(
"res.currency", string="Default currency used in Carbone Report", compute="_compute_carbone_default_currency_id"
)
def _compute_carbone_default_currency_id(self):
for rec in self:
currency = self.env.user.company_id.currency_id
if "currency_id" in rec._fields.keys():
currency = rec.currency_id
rec.carbone_default_currency_id = currency
@api.model
def _jsonify_value(self, field, value):
"""Overloading the OCA jsonifier library function :
- Datetime fields are displayed directly with the time zone set in context.
-The value of a Selection field's label is displayed, rather than the key stored in the database."""
if value is False and field.type != "boolean":
value = None
elif field.type == "date":
value = fields.Date.to_date(value).isoformat()
elif field.type == "datetime":
# Ensures value is a datetime
value = fields.Datetime.to_datetime(value)
expected_tz = self.env.context.get("tz") or self.env.user.tz
tz_pytz = pytz.timezone(expected_tz) if expected_tz else pytz.utc
value = pytz.utc.localize(value).astimezone(tz_pytz)
value = value.isoformat()
elif field.type in ("many2one", "reference"):
value = value.display_name if value else None
elif field.type in ("one2many", "many2many"):
value = [v.display_name for v in value]
elif field.type == "selection":
selection_list = field._description_selection(self.env)
value = dict(selection_list).get(value)
return value