from django import forms from django.utils.translation import ugettext_lazy as _ from django_iban.forms import IBANFormField class PaymentSourceDataForm(forms.ModelForm): class Meta: exclude = ('data', 'method') def __init__(self, *args, **kwargs): super(PaymentSourceDataForm, self).__init__(*args, **kwargs) instance = kwargs.get('instance') if instance: for field in self.declared_fields: initial = self.fields[field].initial self.fields[field].initial = instance.data.get(field, initial) def save(self, commit=True): plugin = self.plugin self.instance.method = plugin.get_plugin_name() self.instance.data = { field: self.cleaned_data[field] for field in self.declared_fields } return super(PaymentSourceDataForm, self).save(commit=commit) class DirectDebitForm(PaymentSourceDataForm): iban = IBANFormField(label='IBAN', widget=forms.TextInput(attrs={'size': '50'})) name = forms.CharField(max_length=128, label=_("Name"), widget=forms.TextInput(attrs={'size': '50'})) class CreditCardForm(PaymentSourceDataForm): label = forms.CharField(max_length=128, label=_("Label"), help_text=_("Use a name such as \"Jo's Visa\" to remember which " "card it is.")) first_name = forms.CharField(max_length=128) last_name = forms.CharField(max_length=128) address = forms.CharField(max_length=128) zip = forms.CharField(max_length=128) city = forms.CharField(max_length=128) country = forms.CharField(max_length=128) card_number = forms.CharField(max_length=128) expiration_date = forms.CharField(max_length=128) security_code = forms.CharField(max_length=128)