diff --git a/app/hr/forms.py b/app/hr/forms.py index ce1aaa4..9eb877f 100644 --- a/app/hr/forms.py +++ b/app/hr/forms.py @@ -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): diff --git a/app/hr/views.py b/app/hr/views.py index 64b6482..d9e8821 100644 --- a/app/hr/views.py +++ b/app/hr/views.py @@ -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))