Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion datetime_formatter/__openerp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
{
"name": "Date & Time Formatter",
"summary": "Helper functions to give correct format to date[time] fields",
"version": "8.0.1.0.0",
"version": "8.0.1.0.1",
"category": "Tools",
"website": "https://grupoesoc.es",
"images": [],
"author": "Grupo ESOC Ingeniería de Servicios, "
"Odoo Community Association (OCA)",
"license": "AGPL-3",
Expand Down
33 changes: 31 additions & 2 deletions datetime_formatter/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import locale
import logging
from datetime import datetime, timedelta
from openerp import api, exceptions, fields, models

from openerp import api, exceptions, fields, models, tools
from openerp.tools import (DEFAULT_SERVER_DATE_FORMAT,
DEFAULT_SERVER_TIME_FORMAT)
from . import exceptions as ex
Expand All @@ -12,6 +15,8 @@
MODE_DATE = "MODE_DATE"
MODE_TIME = "MODE_TIME"

_logger = logging.getLogger(__name__)


class ResLang(models.Model):
_inherit = "res.lang"
Expand Down Expand Up @@ -61,6 +66,23 @@ def best_match(self, lang=None, failure_safe=True):

return record

@api.model
def _set_locale(self, lang=None):
"""Set the locale to translate months and days."""
fail = True
for ln in tools.get_locales(lang):
try:
locale.setlocale(locale.LC_TIME, str(ln))
fail = False
break
except locale.Error:
continue
if fail:
lc = locale.getdefaultlocale()[0]
msg = ('Unable to get information for locale %s. Information '
'from the default locale (%s) have been used.')
_logger.warning(msg, lang, lc)

@api.model
def datetime_formatter(self, value, lang=None, template=MODE_DATETIME,
separator=" ", failure_safe=True):
Expand Down Expand Up @@ -89,6 +111,10 @@ def datetime_formatter(self, value, lang=None, template=MODE_DATETIME,
# Get the correct lang
lang = self.best_match(lang)

# Backup the current locale and set the correct one
locale_backup = locale.getlocale(locale.LC_TIME)
self._set_locale(lang.code)

# Get the template
if template in {MODE_DATETIME, MODE_DATE, MODE_TIME}:
defaults = []
Expand Down Expand Up @@ -117,4 +143,7 @@ def datetime_formatter(self, value, lang=None, template=MODE_DATETIME,
# Convert to time
value = (datetime.min + timedelta(hours=value)).time()

return value.strftime(template)
res = value.strftime(template)
# Restore the locale
locale.setlocale(locale.LC_TIME, locale_backup)
return res