Source code for richy.core.forms

from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _

from ..indexes.models import Index
from ..transactions.models import Transaction
from .models import Item, UserItem


[docs] class SearchForm(forms.Form): query = forms.CharField(label=_("Search")) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["query"].widget.attrs["autocomplete"] = "off"
[docs] class BaseUserItemForm(forms.ModelForm): symbol = forms.CharField(label=_("Symbol")) class Meta: model = UserItem exclude = ["user", "item"] def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user self.fields["indexes"].queryset = Index.objects.by_user(user) self.fields["note"].help_text = _( "You can use #hashtags which will be recognized on Dashboard." ) self.fields["symbol"].help_text = _( 'Symbols based on yahoo.finance.com. For indexes don\'t use the "^".' ) if self.instance.pk: self.fields["symbol"].widget.attrs["readonly"] = True self.fields["symbol"].initial = self.instance.item.symbol
[docs] def clean_symbol(self): """ Converts symbol to UPPERCASE. :return: Uppercased symbol. :rtype: str """ symbol = self.cleaned_data.get("symbol") # For new items we do check duplicity. if ( not self.instance.pk and self.item_model.objects.filter(symbol=symbol).exists() and self.user.useritem_set.filter( item=self.item_model.objects.get(symbol=symbol) ).exists() ): raise forms.ValidationError(_("This item has been already added.")) return symbol.upper()
[docs] def clean_is_archived(self): """ Checks if item can be archived or not. :raise ValidationError: In case when item cannot be archived. :return: Archived flag value. :rtype: bool """ is_archived = self.cleaned_data.get("is_archived") if ( is_archived and self.instance.pk and Transaction.objects.by_user(self.user) .filter(item=self.instance.item, is_closed=False) .exists() ): raise ValidationError( _("Item has open transaction thus cannot be archived.") ) return is_archived
[docs] class SplitterForm(forms.Form): item = forms.ModelChoiceField(queryset=Item.objects.none(), label=_("Item")) date = forms.DateField(label=_("Split date")) ratio = forms.FloatField(label=_("Ratio")) def __init__(self, model, *args, **kwargs): super().__init__(*args, **kwargs) # TODO: brat z useritemu self.fields["item"].queryset = model.objects.order_by("symbol")
[docs] class SplitterPreviewForm(forms.Form): pass