Remove hacky dynamic classes, use the suggest method for dynamic forms

This commit is contained in:
2011-09-07 11:27:35 +01:00
parent ae3607b682
commit 829cd75191
2 changed files with 41 additions and 52 deletions

View File

@@ -10,66 +10,58 @@ from hr.models import Application, Audit, TemplateMessage
from eve_api.models import EVEPlayerCharacter, EVEPlayerCorporation
from eve_api.app_defines import API_STATUS_OK
def CreateRecommendationForm(user):
""" Generate a Recommendation form based on the user's permissions """
characters = EVEPlayerCharacter.objects.filter(eveaccount__user=user).distinct()
applications = Application.objects.filter(status=APPLICATION_STATUS_NOTSUBMITTED)
class RecommendationForm(forms.Form):
""" Add Recommendation Form """
class RecommendationForm(forms.Form):
""" Service Account Form """
character = forms.ModelChoiceField(queryset=EVEPlayerCharacter.objects.all(), required=True, empty_label=None)
application = forms.ModelChoiceField(queryset=Application.objects.filter(status=APPLICATION_STATUS_NOTSUBMITTED), required=True, empty_label=None)
character = forms.ModelChoiceField(queryset=characters, required=True, empty_label=None)
application = forms.ModelChoiceField(queryset=applications, required=True, empty_label=None)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(RecommendationForm, self).__init__(*args, **kwargs)
self.fields['character'].queryset = EVEPlayerCharacter.objects.filter(eveaccount__user=user, eveaccount__api_status=API_STATUS_OK).distinct()
def clean(self):
def clean(self):
char = self.cleaned_data.get('character')
app = self.cleaned_data.get('application')
char = self.cleaned_data.get('character')
app = self.cleaned_data.get('application')
if app.user in User.objects.filter(eveaccount__characters__id=char.id):
raise forms.ValidationError("You cannot recommend your own character")
if app.user in User.objects.filter(eveaccount__characters__id=char.id):
raise forms.ValidationError("You cannot recommend your own character")
return self.cleaned_data
return RecommendationForm
return self.cleaned_data
def CreateApplicationForm(user):
""" Generate a Application form based on the user's permissions """
class ApplicationForm(forms.Form):
characters = EVEPlayerCharacter.objects.filter(eveaccount__user=user, eveaccount__api_status=API_STATUS_OK).distinct()
corporations = EVEPlayerCorporation.objects.filter(application_config__is_accepting=True)
character = forms.ModelChoiceField(queryset=EVEPlayerCharacter.objects.all(), required=True, empty_label=None)
corporation = forms.ModelChoiceField(queryset=EVEPlayerCorporation.objects.filter(application_config__is_accepting=True), required=True, empty_label=None)
class ApplicationForm(forms.Form):
character = forms.ModelChoiceField(queryset=characters, required=True, empty_label=None)
corporation = forms.ModelChoiceField(queryset=corporations, required=True, empty_label=None)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(ApplicationForm, self).__init__(*args, **kwargs)
self.fields['character'].queryset = EVEPlayerCharacter.objects.filter(eveaccount__user=user, eveaccount__api_status=API_STATUS_OK).distinct()
def clean_character(self):
if not 'character' in self.cleaned_data or not self.cleaned_data['character']:
raise forms.ValidationError("Please select a character to apply with")
def clean_character(self):
if not 'character' in self.cleaned_data or not self.cleaned_data['character']:
raise forms.ValidationError("Please select a character to apply with")
if Application.objects.filter(character=self.cleaned_data['character']).exclude(status__in=[APPLICATION_STATUS_NOTSUBMITTED, APPLICATION_STATUS_COMPLETED, APPLICATION_STATUS_REJECTED]).count():
raise forms.ValidationError("This character already has a open application")
if Application.objects.filter(character=self.cleaned_data['character']).exclude(status__in=[APPLICATION_STATUS_NOTSUBMITTED, APPLICATION_STATUS_COMPLETED, APPLICATION_STATUS_REJECTED]).count():
raise forms.ValidationError("This character already has a open application")
return self.cleaned_data['character']
return self.cleaned_data['character']
def clean(self):
char = self.cleaned_data.get('character')
corp = self.cleaned_data.get('corporation')
def clean(self):
if char and corp:
if char.corporation == corp:
raise forms.ValidationError("%s is already a member of %s" % (char, corp))
if not char.account.api_keytype == corp.application_config.api_required:
raise forms.ValidationError("%s requires a %s API key for this application" % (corp, corp.application_config.get_api_required_display()))
char = self.cleaned_data.get('character')
corp = self.cleaned_data.get('corporation')
if char and corp:
if char.corporation == corp:
raise forms.ValidationError("%s is already a member of %s" % (char, corp))
if not char.account.api_keytype == corp.application_config.api_required:
raise forms.ValidationError("%s requires a %s API key for this application" % (corp, corp.application_config.get_api_required_display()))
return self.cleaned_data
return ApplicationForm
return self.cleaned_data
class NoteForm(forms.ModelForm):

View File

@@ -14,7 +14,7 @@ from gargoyle import gargoyle
from utils import installed, blacklist_values
from eve_api.models import EVEAccount, EVEPlayerCorporation, EVEPlayerCharacter
from hr.forms import CreateRecommendationForm, CreateApplicationForm, NoteForm, BlacklistUserForm, AdminNoteForm
from hr.forms import RecommendationForm, ApplicationForm, NoteForm, BlacklistUserForm, AdminNoteForm
from hr.models import Recommendation, Application, Audit, Blacklist, BlacklistSource
from app_defines import *
@@ -112,16 +112,15 @@ def view_application(request, applicationid):
def add_application(request):
""" Create a new application to a corporation """
clsform = CreateApplicationForm(request.user)
if request.method == 'POST':
form = clsform(request.POST)
form = ApplicationForm(request.POST, user=request.user)
if form.is_valid():
app = Application(user=request.user, character=form.cleaned_data['character'], corporation=form.cleaned_data['corporation'])
app.save()
messages.add_message(request, messages.INFO, "Your application to %s has been created." % app.corporation)
return HttpResponseRedirect(reverse('hr.views.view_application', args=[app.id]))
else:
form = clsform() # An unbound form
form = ApplicationForm(user=request.user)
if len(EVEPlayerCorporation.objects.filter(application_config__is_accepting=True)):
return render_to_response('hr/applications/add.html', locals(), context_instance=RequestContext(request))
@@ -145,9 +144,8 @@ def add_recommendation(request):
if len(blacklist_values(request.user, BLACKLIST_LEVEL_ADVISORY)):
raise Http404
clsform = CreateRecommendationForm(request.user)
if request.method == 'POST':
form = clsform(request.POST)
form = RecommendationForm(request.POST, user=request.user)
if form.is_valid():
rec = Recommendation(user=request.user)
rec.user_character = form.cleaned_data['character']
@@ -156,9 +154,8 @@ def add_recommendation(request):
messages.add_message(request, messages.INFO, "Recommendation added to %s's application" % rec.application )
return HttpResponseRedirect(reverse('hr.views.view_recommendations'))
else:
form = clsform() # An unbound form
form = RecommendationForm(user=request.user) # An unbound form
return render_to_response('hr/recommendations/add.html', locals(), context_instance=RequestContext(request))