Compare commits

..

2 commits

View file

@ -7,13 +7,12 @@ from datetime import datetime
from logging import getLogger from logging import getLogger
from time import strptime, strftime from time import strptime, strftime
from zope.browser.interfaces import ITerms from zope.browser.interfaces import ITerms
from zope.i18n.format import DateTimeParseError
from zope.i18n.locales import locales from zope.i18n.locales import locales
from zope.interface import implementer from zope.interface import implementer
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.component import adapts from zope.component import adapts
from zope import component from zope import component
from zope.i18n.format import DateTimeParseError
from zope.i18n.locales import locales
from zope.schema.interfaces import IVocabularyFactory, IContextSourceBinder from zope.schema.interfaces import IVocabularyFactory, IContextSourceBinder
from zope.tales.engine import Engine from zope.tales.engine import Engine
from zope.tales.tales import Context from zope.tales.tales import Context
@ -263,9 +262,9 @@ class DecimalFieldInstance(NumberFieldInstance):
format = 'decimal' format = 'decimal'
def marshall(self, value): def marshall(self, value):
return self.display(value, pattern=u'0.00;-0.00') return self.display(value, pattern='0.00;-0.00')
def display(self, value, pattern=u'#,##0.00;-#,##0.00'): def display(self, value, pattern='#,##0.00;-#,##0.00'):
if value is None: if value is None:
return '' return ''
if isinstance(value, str): if isinstance(value, str):
@ -280,9 +279,15 @@ class DecimalFieldInstance(NumberFieldInstance):
return fmt.format(value, pattern=pattern) return fmt.format(value, pattern=pattern)
return '%.2f' % value return '%.2f' % value
def unmarshall(self, value): def unmarshall(self, value, pattern='#,##0.00;-#,##0.00'):
if not value: if not value:
return None return None
view = self.clientInstance.view
langInfo = view and getattr(view, 'languageInfo', None) or None
if langInfo:
locale = locales.getLocale(langInfo.language)
fmt = locale.numbers.getFormatter(self.format)
return fmt.parse(value, pattern=pattern)
if ',' in value: if ',' in value:
value = value.replace(',', '.') value = value.replace(',', '.')
return float(value) return float(value)