Initial commit of the HR management code

This commit is contained in:
2010-04-05 02:43:27 +01:00
parent 6b8a4e374d
commit 52a41f4229
14 changed files with 364 additions and 11 deletions

0
hr/__init__.py Normal file
View File

17
hr/admin.py Normal file
View File

@@ -0,0 +1,17 @@
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from hr.models import Application, Recommendation
class ApplicationAdmin(admin.ModelAdmin):
list_display = ('user', 'character', 'status')
search_fields = ['user', 'character', 'status']
admin.site.register(Application, ApplicationAdmin)
class RecommendationAdmin(admin.ModelAdmin):
list_display = ('user', 'user_character')
search_fields = ['user_character']
admin.site.register(Recommendation, RecommendationAdmin)

16
hr/app_defines.py Normal file
View File

@@ -0,0 +1,16 @@
APPLICATION_STATUS_NOTSUBMITTED = 0
APPLICATION_STATUS_AWAITINGREVIEW = 1
APPLICATION_STATUS_REJECTED = 2
APPLICATION_STATUS_ACCEPTED = 3
APPLICATION_STATUS_QUERY = 4
APPLICATION_STATUS_COMPLETED = 5
APPLICATION_STATUS_CHOICES = (
(APPLICATION_STATUS_NOTSUBMITTED, 'Not Submitted'),
(APPLICATION_STATUS_AWAITINGREVIEW, 'Awaiting Review'),
(APPLICATION_STATUS_REJECTED, 'Rejected'),
(APPLICATION_STATUS_ACCEPTED, 'Accepted'),
(APPLICATION_STATUS_QUERY, 'In Query'),
(APPLICATION_STATUS_COMPLETED, 'Completed'),
)

34
hr/forms.py Normal file
View File

@@ -0,0 +1,34 @@
from django import forms
import settings
from hr.app_defines import *
from hr.models import Application
from eve_api.models import EVEPlayerCharacter
def CreateRecommendationForm(user):
""" Generate a Recommendation form based on the user's permissions """
characters = EVEPlayerCharacter.objects.filter(eveaccount__user=user)
applications = Application.objects.filter(status=APPLICATION_STATUS_NOTSUBMITTED)
class RecommendationForm(forms.Form):
""" Service Account Form """
character = forms.ModelChoiceField(queryset=characters, required=True, empty_label=None)
application = forms.ModelChoiceField(queryset=applications, required=True, empty_label=None)
return RecommendationForm
def CreateApplicationForm(user):
""" Generate a Application form based on the user's permissions """
characters = EVEPlayerCharacter.objects.filter(eveaccount__user=user)
corporations = EVEPlayerCorporation.objects.filter(applications=True)
class ApplicationForm(forms.Form):
character = forms.ModelChoiceField(queryset=characters, required=True, empty_label=None)
return ApplicationForm

40
hr/models.py Normal file
View File

@@ -0,0 +1,40 @@
from datetime import datetime
from django.db import models
from django.contrib.auth.models import User
from eve_api.models import EVEPlayerCharacter, EVEPlayerCorporation
from hr.app_defines import *
class Application(models.Model):
user = models.ForeignKey(User, blank=False, verbose_name="User")
character = models.ForeignKey(EVEPlayerCharacter, blank=False, verbose_name="Character")
corporation = models.ForeignKey(EVEPlayerCorporation, blank=False, verbose_name="Applying to Corporation")
status = models.IntegerField(choices=APPLICATION_STATUS_CHOICES,
default=APPLICATION_STATUS_NOTSUBMITTED,
verbose_name="Status",
help_text="Current status of this application request.")
@property
def status_description(self):
for choice in APPLICATION_STATUS_CHOICES:
if choice[0] == self.status:
return choice[1]
def __unicode__(self):
return self.character.name
def __str__(self):
return self.__unicode__()
class Recommendation(models.Model):
user = models.ForeignKey(User, blank=False, verbose_name="User")
user_character = models.ForeignKey(EVEPlayerCharacter, blank=False, verbose_name="Recommender")
application = models.ForeignKey(Application, blank=False, verbose_name="Recommended Application")
def __unicode__(self):
return self.user_character.name
def __str__(self):
return self.__unicode__()

23
hr/tests.py Normal file
View File

@@ -0,0 +1,23 @@
"""
This file demonstrates two different styles of tests (one doctest and one
unittest). These will both pass when you run "manage.py test".
Replace these with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.failUnlessEqual(1 + 1, 2)
__test__ = {"doctest": """
Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2
True
"""}

14
hr/urls.py Normal file
View File

@@ -0,0 +1,14 @@
from django.conf.urls.defaults import *
from hr import views
urlpatterns = patterns('',
('^$', views.index),
(r'^recommendations/$', views.view_recommendations),
(r'^recommendations/(?P<recommendationid>.*)/$', views.view_recommendation),
(r'^applications/$', views.view_applications),
(r'^applications/(?P<applicationid>.*)/$', views.view_application),
(r'^add/application/$', views.add_application),
(r'^add/recommendation/$', views.add_recommendation),
)

102
hr/views.py Normal file
View File

@@ -0,0 +1,102 @@
import datetime
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from hr.forms import CreateRecommendationForm, CreateApplicationForm
from hr.models import Recommendation, Application
def index(request):
if request.user.is_staff or 'hrstaff' in request.user.groups.all():
hrstaff = True
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
### Application Management
@login_required
def view_applications(request):
apps = Application.objects.filter(user=request.user)
return render_to_response('hr/applications/view_list.html', locals(), context_instance=RequestContext(request))
@login_required
def view_application(request, applicationid):
try:
app = Application.objects.get(id=applicationid)
except Application.DoesNotExist:
return HttpResponseRedirect(reverse('hr.views.index'))
return render_to_response('hr/applications/view.html', locals(), context_instance=RequestContext(request))
@login_required
def add_application(request):
clsform = CreateApplicationForm(request.user)
if request.method == 'POST':
form = clsform(request.POST)
if form.is_valid():
app = Application()
app.user = request.user
app.character = form.cleaned_data['character']
app.corporation = form.cleaned_data['corporation']
app.save()
request.user.message_set.create(message="Application has been submitted." % rec.application )
return HttpResponseRedirect(reverse('hr.views.view_applications'))
else:
return HttpResponseRedirect(reverse('hr.views.add_application'))
else:
form = clsform() # An unbound form
return render_to_response('hr/applications/add.html', locals(), context_instance=RequestContext(request))
### Recommendation Management
@login_required
def view_recommendations(request):
recs = Recommendation.objects.filter(user=request.user, application__status=0)
return render_to_response('hr/recommendations/view_list.html', locals(), context_instance=RequestContext(request))
@login_required
def view_recommendation(request, recommendationid):
try:
rec = Recommendation.objects.get(id=recommendationid, user=request.user)
except Recommendation.DoesNotExist:
return HttpResponseRedirect(reverse('hr.views.index'))
return render_to_response('hr/recommendations/view.html', locals(), context_instance=RequestContext(request))
@login_required
def add_recommendation(request):
clsform = CreateRecommendationForm(request.user)
if request.method == 'POST':
form = clsform(request.POST)
if form.is_valid():
rec = Recommendation()
rec.user = request.user
rec.user_character = form.cleaned_data['character']
rec.application = form.cleaned_data['application']
rec.created_by = request.user
rec.last_updated_by = request.user
rec.save()
request.user.message_set.create(message="Recommendation added to %s's application" % rec.application )
return HttpResponseRedirect(reverse('hr.views.view_recommendations'))
else:
return HttpResponseRedirect(reverse('hr.views.add_recommendation'))
else:
form = clsform() # An unbound form
return render_to_response('hr/recommendations/add.html', locals(), context_instance=RequestContext(request))