Example #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.get(currency, False) or currency == u'XXX':
         raise forms.ValidationError(_(u'This currency not exist'))
     return Money(amount=amount, currency=currency)
Example #2
0
    def testCreating(self):
        ind = 0
        for code, currency in CURRENCY.items():
            ind = ind + 1
            price = Money(ind*1000.0, code)
            Entity.objects.create(name=currency.name, price=price)
        count = Entity.objects.all().count()
        self.assertEqual(len(CURRENCY), count)

        for code in CURRENCY:
            count = Entity.objects.filter(price_currency=code).count()
            self.assertTrue(count == 1)
Example #3
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.get(currency, False) or currency == u'XXX':
         raise forms.ValidationError(_(u'This currency not exist'))
     return Money(amount=amount, currency=currency)
Example #4
0
    def __init__(self, choices=None, decimal_places=2, max_digits=12, *args, **kwargs):
        # Note that we catch args and kwargs that must only go to one field
        # or the other. The rest of them pass onto the decimal field.
        choices = choices or list(
            ((u"%s" % (c.code,), u"%s - %s" % (c.code, c.name)) for i, c in sorted(CURRENCY.items()) if c.code != "XXX")
        )

        self.widget = CurrencySelectWidget(choices)

        fields = (
            forms.DecimalField(*args, decimal_places=decimal_places, max_digits=max_digits, **kwargs),
            forms.ChoiceField(choices=choices),
        )
        super(MoneyField, self).__init__(fields, *args, **kwargs)
Example #5
0
    def __init__(self,
                 choices=None,
                 decimal_places=2,
                 max_digits=12,
                 *args,
                 **kwargs):
        # Note that we catch args and kwargs that must only go to one field
        # or the other. The rest of them pass onto the decimal field.
        choices = choices or list(
            ((u"%s" % (c.code, ), u"%s - %s" % (c.code, c.name))
             for i, c in sorted(CURRENCY.items()) if c.code != 'XXX'))

        self.widget = CurrencySelectWidget(choices)

        fields = (forms.DecimalField(*args,
                                     decimal_places=decimal_places,
                                     max_digits=max_digits,
                                     **kwargs),
                  forms.ChoiceField(choices=choices))
        super(MoneyField, self).__init__(fields, *args, **kwargs)
Example #6
0
    def __init__(
        self, choices=None, decimal_places=2, max_digits=12, default_currency=None, min_value=None, *args, **kwargs
    ):
        # Note that we catch args and kwargs that must only go to one field
        # or the other. The rest of them pass onto the decimal field.
        choices = choices or list(
            ((u"%s" % (c.code,), self.label_from_currency(c)) for i, c in sorted(CURRENCY.items()) if c.code != "XXX")
        )

        self.widget = CurrencySelectWidget(choices)

        fields = (
            forms.DecimalField(
                *args, decimal_places=decimal_places, min_value=min_value, max_digits=max_digits, **kwargs
            ),
            forms.ChoiceField(choices=choices),
        )

        if default_currency:
            kwargs.update({"initial": Money("", default_currency)})

        super(MoneyField, self).__init__(fields, *args, **kwargs)
Example #7
0
from django import  forms
from money import Money, CURRENCY
from decimal import Decimal

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

CURRENCY_CHOICES = sorted([(c.code, c.name) for i, c in CURRENCY.items() if c.code != 'XXX'], key = lambda x: x[1])

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
Example #8
0
from django import forms
from money import Money, CURRENCY
from decimal import Decimal

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

CURRENCY_CHOICES = sorted([(c.code, c.name)
                           for i, c in CURRENCY.items() if c.code != 'XXX'],
                          key=lambda x: x[1])


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
Example #9
0
from django import forms as forms
from money import Money, CURRENCY
from decimal import Decimal
from django.conf import settings

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

if hasattr(settings, 'MONEY_CURRENCY_CHOICES'):
    CURRENCY_CHOICES = ((c.code, c.name) for i, c in CURRENCY.items() if c.code in settings.MONEY_CURRENCY_CHOICES)
else:    
    CURRENCY_CHOICES = ((c.code, c.name) for i, c in CURRENCY.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
Example #10
0
from main import Currency, db
from money import CURRENCY

for code, obj in CURRENCY.items():
    currency = Currency(name=obj.name, iso_code=obj.code)
    db.session.add(currency)

db.session.commit()
Example #11
0
from django import forms
from money import Money, CURRENCY
from decimal import Decimal
import operator

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

CURRENCY_CHOICES = [(c.code, c.name) for i, c in CURRENCY.items() if c.code != 'XXX']
CURRENCY_CHOICES.sort(key=operator.itemgetter(1))

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]
Example #12
0
class SimpleVocabularyFactory(object):
    implements(IVocabularyFactory)

    def __init__(self, vocab):
        self.vocab = vocab

    def __call__(self, context):
        terms = [SimpleTerm(title=_(title), value=value)
                 for value, title in self.vocab.iteritems()]
        return SimpleVocabulary(sorted(terms, key=lambda elem: elem.title))

AccountsVocabularyFactory = CatalogVocabularyFactory('FinanceAccount')
TransactionsVocabularyFactory = CatalogVocabularyFactory('FinanceTransaction')
CategoriesVocabularyFactory = CatalogVocabularyFactory('FinanceCategory')
TransfersVocabularyFactory = CatalogVocabularyFactory('FinanceTransfer')
currency_vocab = {v.code: v.name for k, v in CURRENCY.iteritems()}
CurrenciesVocabularyFactory = SimpleVocabularyFactory(currency_vocab)


account_types = {
    'Cash': 'Cash',
    'Bank': 'Bank',
    'CCard': 'Credit Card',
    'Invst': 'Investing',
    'Oth A': 'Asset',
    'Oth L': 'Liability',
}

AccountTypesVocabularyFactory = SimpleVocabularyFactory(account_types)