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.models import EVEPlayerCharacter, EVEPlayerCorporation
from eve_api.app_defines import API_STATUS_OK 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() class RecommendationForm(forms.Form):
applications = Application.objects.filter(status=APPLICATION_STATUS_NOTSUBMITTED) """ Add Recommendation Form """
class RecommendationForm(forms.Form): character = forms.ModelChoiceField(queryset=EVEPlayerCharacter.objects.all(), required=True, empty_label=None)
""" Service Account Form """ 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) def __init__(self, *args, **kwargs):
application = forms.ModelChoiceField(queryset=applications, required=True, empty_label=None) 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') if app.user in User.objects.filter(eveaccount__characters__id=char.id):
app = self.cleaned_data.get('application') raise forms.ValidationError("You cannot recommend your own character")
if app.user in User.objects.filter(eveaccount__characters__id=char.id): return self.cleaned_data
raise forms.ValidationError("You cannot recommend your own character")
return self.cleaned_data
return RecommendationForm
def CreateApplicationForm(user): class ApplicationForm(forms.Form):
""" Generate a Application form based on the user's permissions """
characters = EVEPlayerCharacter.objects.filter(eveaccount__user=user, eveaccount__api_status=API_STATUS_OK).distinct() character = forms.ModelChoiceField(queryset=EVEPlayerCharacter.objects.all(), required=True, empty_label=None)
corporations = EVEPlayerCorporation.objects.filter(application_config__is_accepting=True) corporation = forms.ModelChoiceField(queryset=EVEPlayerCorporation.objects.filter(application_config__is_accepting=True), required=True, empty_label=None)
class ApplicationForm(forms.Form): def __init__(self, *args, **kwargs):
character = forms.ModelChoiceField(queryset=characters, required=True, empty_label=None) user = kwargs.pop('user', None)
corporation = forms.ModelChoiceField(queryset=corporations, required=True, empty_label=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): def clean_character(self):
if not 'character' in self.cleaned_data or not self.cleaned_data['character']:
if not 'character' in self.cleaned_data or not self.cleaned_data['character']: raise forms.ValidationError("Please select a character to apply with")
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(): 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") 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') return self.cleaned_data
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
class NoteForm(forms.ModelForm): class NoteForm(forms.ModelForm):

View File

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