GOSTCoin Web Wallet
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

58 lines
1.9 KiB

from django import forms
from django.core.exceptions import ValidationError
from django.conf import settings
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout
from decimal import Decimal
from .models import Account
class SendCoins(forms.Form):
recipient = forms.RegexField(
regex="^[a-zA-Z0-9]{16,35}$",
label="Address or local account")
amount = forms.DecimalField(label="amount",
min_value=Decimal("0.01"),
max_value=Decimal("2000000"))
def clean_recipient(self):
"""Validate recipient"""
data = self.cleaned_data["recipient"]
if (len(data) == 34 or len(data) == 35) and data.startswith("G"):
"""Valid GST address"""
return data
elif len(data) == 16:
"""Account name"""
try:
a = Account.objects.get(name=data)
except Account.DoesNotExist:
raise ValidationError("Invalid account name", code="invalid")
else:
raise ValidationError("Incorrect recipient address/account name",
code="invalid")
return data
def clean(self):
"""Check balance"""
if self.user and self.is_valid():
if len(self.cleaned_data["recipient"]) == 16:
total_amount = self.cleaned_data["amount"]
else:
total_amount = self.cleaned_data["amount"] + \
settings.GST_NETWORK_FEE + settings.SERVICE_FEE
if self.user.account.balance < total_amount:
raise ValidationError("Not enough coins on balance")
return self.cleaned_data
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(SendCoins, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.add_input(Submit('submit', 'Send'))