Exemplo n.º 1
0
 def clean(self, value):
     if not isinstance(value, tuple):
         raise Exception("Invalid value provided for MoneyField.clean (expected tupple)")
     amount = super(MoneyField, self).clean(value[0])
     currency = value[1]
     if not currency:
         raise forms.ValidationError(_(u"Input currency"))
     currency = currency.upper()
     if not currency_provider().get(currency, False) or currency == u"XXX":
         raise forms.ValidationError(_(u"This currency not exist"))
     return Money(amount=amount, currency=currency)
Exemplo n.º 2
0
    
    objects = CurrencyManager()
    
    def __unicode__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        if self.default and self.pk:
            type(self).objects.exclude(pk=self.pk, default=False).update(default=False)
        return models.Model.save(self, *args, **kwargs)
    
    class Meta:
        ordering = ['-default', 'code']
        verbose_name_plural = "currencies"

ORIGINAL_CURRENCIES = money.currency_provider()
money.set_currency_provider(Currency.objects)

def _load_currencies():
    for key, value in ORIGINAL_CURRENCIES.iteritems():
        if key == 'XXX': continue
        Currency.objects.get_or_create(name=value.name,
                                       code=value.code,
                                       numeric=value.numeric)
    try:
        Currency.objects.default()
    except Currency.DoesNotExist:
        new_default = Currency.objects['USD']
        new_default.default = True
        new_default.save()
Exemplo n.º 3
0
 def choices():
     yield '', '--'
     for key in currency_provider().iterkeys():
         yield key, key
Exemplo n.º 4
0
from django import forms
from money import Money, currency_provider
from decimal import Decimal

__all__ = ('InputMoneyWidget', 'CurrencySelect',)

CURRENCY_CHOICES = ((c.code, c.name) for i, c in currency_provider().items() if c.code != 'XXX')

class CurrencySelect(forms.Select):
    def __init__(self, attrs=None, choices=CURRENCY_CHOICES):
        super(CurrencySelect, self).__init__(attrs, choices)
    
class InputMoneyWidget(forms.TextInput):
    
    def __init__(self, attrs=None, currency_widget=None):
        self.currency_widget = currency_widget
        if not self.currency_widget:
            self.currency_widget = CurrencySelect()
        super(InputMoneyWidget, self).__init__(attrs)
    
    def render(self, name, value, attrs=None):
        amount = ''
        currency = ''
        if isinstance(value, Money):
            amount = value.amount
            currency = value.currency.code
        if isinstance(value, tuple):
            amount = value[0]
            currency = value[1]
        if isinstance(value, int) or isinstance(value, Decimal):
            amount = value