74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
from django import forms
|
|
from django.core.exceptions import ValidationError
|
|
import re
|
|
from decimal import Decimal, InvalidOperation
|
|
|
|
#class CurrencyField(forms.IntegerField):
|
|
# default_error_message = {
|
|
# 'invalid': _(u'Enter a number.'),
|
|
# }
|
|
# def __init__(self, positive=True, *args, **kwargs):
|
|
# super(IntegerField, self).__init__(*args, **kwargs)
|
|
# self.positive = positive
|
|
# def to_python(self, value):
|
|
# value = super(IntegerField, self).to_python(value)
|
|
# if value in validators.EMPTY_VALUES:
|
|
# return None
|
|
# try:
|
|
# value = float(value.replace(",", "."))
|
|
# except:
|
|
# pass
|
|
|
|
class CurrencyInput (forms.TextInput):
|
|
def render(self, name, value, attrs=None):
|
|
if value != '':
|
|
try:
|
|
value = u"%.2f" % value
|
|
except TypeError:
|
|
pass
|
|
return super(CurrencyInput, self).render(name, value, attrs)
|
|
|
|
|
|
class CurrencyField (forms.RegexField):
|
|
""" Represents a currency field for django forms... or something. """
|
|
widget = CurrencyInput
|
|
currencyRe = re.compile(r'^[0-9]{1,5}([,\.][0-9][0-9]?)?$')
|
|
|
|
#currencyRe = re.compile(r'^[0-9]{1,5}(.[0-9][0-9]?)?$')
|
|
# currencyRe = re.compile(r"^[0-9]")
|
|
def __init__(self, *args, **kwargs):
|
|
super(CurrencyField, self).__init__(
|
|
self.currencyRe, None, None, *args, **kwargs)
|
|
|
|
#class CurrencyField(forms.FloatField):
|
|
# widget = CurrencyInput
|
|
# moneyre = re.compile(r"^[0-9]{1,5}([\.][0-9][0-9])?$")
|
|
# def __init__(self, positive=False, allowPerCent=False, *args, **kwargs):
|
|
# super(forms.FloatField, self).__init__(*args, **kwargs)
|
|
# self.positive = positive
|
|
# self.allowPerCent = allowPerCent
|
|
def to_python(self, value):
|
|
#return super(forms.FloatField, self).to_python(value)
|
|
#raise ValidationError("WTF WTF WTF %s " % value)
|
|
#value = value.replace(",", ".")
|
|
#try:
|
|
# value = super(forms.FloatField, self).to_python(value)
|
|
#except ValidationError, e:
|
|
# raise NotImplementedError("%s %s" % (e, value))
|
|
#return value
|
|
value = value.replace(",", ".")
|
|
try:
|
|
value = Decimal(value)
|
|
except (ValueError, TypeError, InvalidOperation):
|
|
raise ValidationError("Bitte gib eine Zahl ein")
|
|
# if not self.allowPerCent:
|
|
# tmpval = 100.0*value
|
|
# if tmpval == int(tmpval):
|
|
# raise ValidationError("Deine Zahl sollte nicht mehr als zwei Nachkommastellen haben. %s %s %s" % (tmpval, int(tmpval), tmpval-int(tmpval)))
|
|
# if self.positive and self.value < 0.0:
|
|
# raise ValidationError("Bitte gib eine positive Zahl an.")
|
|
return value
|
|
def clean(self, value):
|
|
value = super(CurrencyField, self).clean(value)
|
|
return Decimal(value)
|