mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 06:42:16 +00:00
Reorganise the file structure into a project tree
This commit is contained in:
0
app/hr/__init__.py
Normal file
0
app/hr/__init__.py
Normal file
43
app/hr/admin.py
Normal file
43
app/hr/admin.py
Normal file
@@ -0,0 +1,43 @@
|
||||
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, Audit, Blacklist, BlacklistSource
|
||||
|
||||
class ApplicationAdmin(admin.ModelAdmin):
|
||||
list_display = ('user', 'character', 'corporation', 'status', 'application_date', 'recommendations')
|
||||
search_fields = ['user', 'character', 'status']
|
||||
list_filter = ('status',)
|
||||
|
||||
def recommendations(self, obj):
|
||||
return obj.recommendation_set.all().count()
|
||||
|
||||
recommendations.short_description = '# of Recommendations'
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
obj.save(user=request.user)
|
||||
|
||||
admin.site.register(Application, ApplicationAdmin)
|
||||
|
||||
class RecommendationAdmin(admin.ModelAdmin):
|
||||
list_display = ('user', 'user_character', 'application', 'recommendation_date', 'is_valid')
|
||||
search_fields = ['user_character']
|
||||
|
||||
admin.site.register(Recommendation, RecommendationAdmin)
|
||||
|
||||
class AuditAdmin(admin.ModelAdmin):
|
||||
list_display = ('application', 'event', 'date')
|
||||
list_filter = ('event',)
|
||||
|
||||
admin.site.register(Audit, AuditAdmin)
|
||||
|
||||
class BlacklistAdmin(admin.ModelAdmin):
|
||||
list_display = ('type', 'value', 'source', 'created_date', 'created_by')
|
||||
list_filter = ('source', 'type')
|
||||
search_fields = ('value',)
|
||||
|
||||
admin.site.register(Blacklist, BlacklistAdmin)
|
||||
|
||||
class BlacklistSourceAdmin(admin.ModelAdmin):
|
||||
list_display = ('id', 'name')
|
||||
|
||||
admin.site.register(BlacklistSource, BlacklistSourceAdmin)
|
||||
65
app/hr/app_defines.py
Normal file
65
app/hr/app_defines.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Permission Levels
|
||||
HR_NONE = 0
|
||||
HR_VIEWONLY = 1
|
||||
HR_ADMIN = 2
|
||||
|
||||
# Application Status Codes
|
||||
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_FLAGGED = 6
|
||||
|
||||
APPLICATION_STATUS_CHOICES = (
|
||||
(APPLICATION_STATUS_NOTSUBMITTED, 'Not Submitted'),
|
||||
(APPLICATION_STATUS_AWAITINGREVIEW, 'Submitted'),
|
||||
(APPLICATION_STATUS_REJECTED, 'Rejected'),
|
||||
(APPLICATION_STATUS_ACCEPTED, 'Accepted'),
|
||||
(APPLICATION_STATUS_QUERY, 'In Query'),
|
||||
(APPLICATION_STATUS_COMPLETED, 'Completed'),
|
||||
(APPLICATION_STATUS_FLAGGED, 'Flagged For Review'),
|
||||
)
|
||||
|
||||
# Audit Event Type Codes
|
||||
AUDIT_EVENT_STATUSCHANGE = 0
|
||||
AUDIT_EVENT_NOTE = 1
|
||||
AUDIT_EVENT_REJECTION = 2
|
||||
AUDIT_EVENT_ACCEPTED = 3
|
||||
AUDIT_EVENT_MESSAGE = 4
|
||||
|
||||
AUDIT_EVENT_CHOICES = (
|
||||
(AUDIT_EVENT_STATUSCHANGE, 'Status Change'),
|
||||
(AUDIT_EVENT_NOTE, 'Staff Note'),
|
||||
(AUDIT_EVENT_REJECTION, 'Rejection Reason'),
|
||||
(AUDIT_EVENT_ACCEPTED, 'Accepted'),
|
||||
(AUDIT_EVENT_MESSAGE, 'Message'),
|
||||
)
|
||||
|
||||
# Blacklist Type Codes
|
||||
BLACKLIST_TYPE_REDDIT = 0
|
||||
BLACKLIST_TYPE_CHARACTER = 1
|
||||
BLACKLIST_TYPE_CORPORATION = 2
|
||||
BLACKLIST_TYPE_ALLIANCE = 3
|
||||
BLACKLIST_TYPE_EMAIL = 4
|
||||
BLACKLIST_TYPE_AUTH = 5
|
||||
BLACKLIST_TYPE_APIUSERID = 6
|
||||
|
||||
BLACKLIST_TYPE_CHOICES = (
|
||||
(BLACKLIST_TYPE_REDDIT, 'Reddit Account'),
|
||||
(BLACKLIST_TYPE_CHARACTER, 'Character'),
|
||||
(BLACKLIST_TYPE_CORPORATION, 'Corporation'),
|
||||
(BLACKLIST_TYPE_ALLIANCE, 'Alliance'),
|
||||
(BLACKLIST_TYPE_EMAIL, 'Email Address'),
|
||||
(BLACKLIST_TYPE_AUTH, 'Auth Account'),
|
||||
(BLACKLIST_TYPE_APIUSERID, 'EVE API User ID'),
|
||||
)
|
||||
|
||||
BLACKLIST_SOURCE_INTERNAL = 0
|
||||
BLACKLIST_SOURCE_EXTERNAL = 1
|
||||
|
||||
BLACKLIST_SOURCE_CHOICES = (
|
||||
(BLACKLIST_SOURCE_INTERNAL, 'Internal'),
|
||||
(BLACKLIST_SOURCE_EXTERNAL, 'External'),
|
||||
)
|
||||
49
app/hr/forms.py
Normal file
49
app/hr/forms.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
||||
from hr.app_defines import *
|
||||
from hr.models import Application, Audit
|
||||
from eve_api.models import EVEPlayerCharacter, EVEPlayerCorporation
|
||||
|
||||
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)
|
||||
corporation = forms.ModelChoiceField(queryset=corporations, required=True, empty_label=None)
|
||||
|
||||
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_COMPLETED, APPLICATION_STATUS_REJECTED]).count():
|
||||
raise forms.ValidationError("This character already has a open application")
|
||||
|
||||
return self.cleaned_data['character']
|
||||
|
||||
return ApplicationForm
|
||||
|
||||
class NoteForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Audit
|
||||
exclude = ('application', 'user', 'event')
|
||||
194
app/hr/migrations/0001_initial.py
Normal file
194
app/hr/migrations/0001_initial.py
Normal file
@@ -0,0 +1,194 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding model 'Application'
|
||||
db.create_table('hr_application', (
|
||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
|
||||
('character', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['eve_api.EVEPlayerCharacter'])),
|
||||
('corporation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['eve_api.EVEPlayerCorporation'])),
|
||||
('status', self.gf('django.db.models.fields.IntegerField')(default=0)),
|
||||
))
|
||||
db.send_create_signal('hr', ['Application'])
|
||||
|
||||
# Adding model 'Recommendation'
|
||||
db.create_table('hr_recommendation', (
|
||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
|
||||
('user_character', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['eve_api.EVEPlayerCharacter'])),
|
||||
('application', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hr.Application'])),
|
||||
))
|
||||
db.send_create_signal('hr', ['Recommendation'])
|
||||
|
||||
# Adding model 'Audit'
|
||||
db.create_table('hr_audit', (
|
||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('application', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hr.Application'])),
|
||||
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], blank=True)),
|
||||
('event', self.gf('django.db.models.fields.IntegerField')()),
|
||||
('text', self.gf('django.db.models.fields.TextField')()),
|
||||
('date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
|
||||
))
|
||||
db.send_create_signal('hr', ['Audit'])
|
||||
|
||||
# Adding model 'Blacklist'
|
||||
db.create_table('hr_blacklist', (
|
||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('type', self.gf('django.db.models.fields.IntegerField')()),
|
||||
('value', self.gf('django.db.models.fields.CharField')(max_length=255)),
|
||||
('reason', self.gf('django.db.models.fields.TextField')()),
|
||||
('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
|
||||
('created_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
|
||||
))
|
||||
db.send_create_signal('hr', ['Blacklist'])
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting model 'Application'
|
||||
db.delete_table('hr_application')
|
||||
|
||||
# Deleting model 'Recommendation'
|
||||
db.delete_table('hr_recommendation')
|
||||
|
||||
# Deleting model 'Audit'
|
||||
db.delete_table('hr_audit')
|
||||
|
||||
# Deleting model 'Blacklist'
|
||||
db.delete_table('hr_blacklist')
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director_update': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
148
app/hr/migrations/0002_auto__add_field_blacklist_expiry_date.py
Normal file
148
app/hr/migrations/0002_auto__add_field_blacklist_expiry_date.py
Normal file
@@ -0,0 +1,148 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'Blacklist.expiry_date'
|
||||
db.add_column('hr_blacklist', 'expiry_date', self.gf('django.db.models.fields.DateTimeField')(null=True), keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'Blacklist.expiry_date'
|
||||
db.delete_column('hr_blacklist', 'expiry_date')
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director_update': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
157
app/hr/migrations/0003_auto__add_field_blacklist_source.py
Normal file
157
app/hr/migrations/0003_auto__add_field_blacklist_source.py
Normal file
@@ -0,0 +1,157 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'Blacklist.source'
|
||||
db.add_column('hr_blacklist', 'source', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'Blacklist.source'
|
||||
db.delete_column('hr_blacklist', 'source')
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'roles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['eve_api.EVEPlayerCharacterRole']", 'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacterrole': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterRole'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'roleid': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'source': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
@@ -0,0 +1,182 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding model 'BlacklistSource'
|
||||
db.create_table('hr_blacklistsource', (
|
||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
|
||||
))
|
||||
db.send_create_signal('hr', ['BlacklistSource'])
|
||||
|
||||
# Renaming column for 'Blacklist.source' to match new field type.
|
||||
db.rename_column('hr_blacklist', 'source', 'source_id')
|
||||
# Changing field 'Blacklist.source'
|
||||
db.alter_column('hr_blacklist', 'source_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hr.BlacklistSource']))
|
||||
|
||||
# Adding index on 'Blacklist', fields ['source']
|
||||
#db.create_index('hr_blacklist', ['source_id'])
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting model 'BlacklistSource'
|
||||
db.delete_table('hr_blacklistsource')
|
||||
|
||||
# Renaming column for 'Blacklist.source' to match new field type.
|
||||
db.rename_column('hr_blacklist', 'source_id', 'source')
|
||||
# Changing field 'Blacklist.source'
|
||||
db.alter_column('hr_blacklist', 'source', self.gf('django.db.models.fields.IntegerField')())
|
||||
|
||||
# Removing index on 'Blacklist', fields ['source']
|
||||
db.delete_index('hr_blacklist', ['source_id'])
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'roles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['eve_api.EVEPlayerCharacterRole']", 'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacterrole': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterRole'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'roleid': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.BlacklistSource']"}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.blacklistsource': {
|
||||
'Meta': {'object_name': 'BlacklistSource'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
158
app/hr/migrations/0005_create_blacklist_sources.py
Normal file
158
app/hr/migrations/0005_create_blacklist_sources.py
Normal file
@@ -0,0 +1,158 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import DataMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(DataMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
orm.BlacklistSource(id=0, name="TEST Blacklist").save()
|
||||
orm.BlacklistSource(id=1, name="External Blacklist").save()
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
pass
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'roles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['eve_api.EVEPlayerCharacterRole']", 'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacterrole': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterRole'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'roleid': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.BlacklistSource']"}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.blacklistsource': {
|
||||
'Meta': {'object_name': 'BlacklistSource'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
163
app/hr/migrations/0006_auto__add_field_blacklistsource_ticker.py
Normal file
163
app/hr/migrations/0006_auto__add_field_blacklistsource_ticker.py
Normal file
@@ -0,0 +1,163 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'BlacklistSource.ticker'
|
||||
db.add_column('hr_blacklistsource', 'ticker', self.gf('django.db.models.fields.CharField')(default='DFLT', max_length=255), keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'BlacklistSource.ticker'
|
||||
db.delete_column('hr_blacklistsource', 'ticker')
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'roles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['eve_api.EVEPlayerCharacterRole']", 'null': 'True', 'blank': 'True'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacterrole': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterRole'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'roleid': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.BlacklistSource']"}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.blacklistsource': {
|
||||
'Meta': {'object_name': 'BlacklistSource'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
@@ -0,0 +1,194 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'Recommendation.recommendation_date'
|
||||
db.add_column('hr_recommendation', 'recommendation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.date(2011, 1, 4), blank=True), keep_default=False)
|
||||
|
||||
# Adding field 'Application.application_date'
|
||||
db.add_column('hr_application', 'application_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.date(2001, 1, 1), blank=True), keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'Recommendation.recommendation_date'
|
||||
db.delete_column('hr_recommendation', 'recommendation_date')
|
||||
|
||||
# Deleting field 'Application.application_date'
|
||||
db.delete_column('hr_application', 'application_date')
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'eve_api.eveplayeralliance': {
|
||||
'Meta': {'ordering': "['date_founded']", 'object_name': 'EVEPlayerAlliance'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_founded': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'executor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacter': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacter'},
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_charisma': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_intelligence': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_memory': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_perception': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'attrib_willpower': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'balance': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']", 'null': 'True', 'blank': 'True'}),
|
||||
'corporation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'current_location_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'director': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'gender': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'last_logoff': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'race': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'roles': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['eve_api.EVEPlayerCharacterRole']", 'null': 'True', 'blank': 'True'}),
|
||||
'security_status': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'skills': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['eve_api.EVESkill']", 'through': "orm['eve_api.EVEPlayerCharacterSkill']", 'symmetrical': 'False'}),
|
||||
'total_sp': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveplayercharacterrole': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterRole'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'roleid': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
'eve_api.eveplayercharacterskill': {
|
||||
'Meta': {'object_name': 'EVEPlayerCharacterSkill'},
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'skill': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVESkill']"}),
|
||||
'skillpoints': ('django.db.models.fields.IntegerField', [], {'default': '0'})
|
||||
},
|
||||
'eve_api.eveplayercorporation': {
|
||||
'Meta': {'object_name': 'EVEPlayerCorporation'},
|
||||
'alliance': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerAlliance']", 'null': 'True', 'blank': 'True'}),
|
||||
'alliance_join_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'api_last_updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'applications': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'ceo_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']", 'null': 'True', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'logo_color1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_color3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_graphic_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape1': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape2': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'logo_shape3': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'member_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'shares': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'tax_rate': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
|
||||
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveskill': {
|
||||
'Meta': {'object_name': 'EVESkill'},
|
||||
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVESkillGroup']", 'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
|
||||
},
|
||||
'eve_api.eveskillgroup': {
|
||||
'Meta': {'object_name': 'EVESkillGroup'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
|
||||
},
|
||||
'hr.application': {
|
||||
'Meta': {'object_name': 'Application'},
|
||||
'application_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"}),
|
||||
'corporation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCorporation']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
|
||||
},
|
||||
'hr.audit': {
|
||||
'Meta': {'object_name': 'Audit'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'event': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'text': ('django.db.models.fields.TextField', [], {}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'blank': 'True'})
|
||||
},
|
||||
'hr.blacklist': {
|
||||
'Meta': {'object_name': 'Blacklist'},
|
||||
'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'reason': ('django.db.models.fields.TextField', [], {}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.BlacklistSource']"}),
|
||||
'type': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.blacklistsource': {
|
||||
'Meta': {'object_name': 'BlacklistSource'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'ticker': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'hr.recommendation': {
|
||||
'Meta': {'object_name': 'Recommendation'},
|
||||
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hr.Application']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'recommendation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
|
||||
'user_character': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['eve_api.EVEPlayerCharacter']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['hr']
|
||||
0
app/hr/migrations/__init__.py
Normal file
0
app/hr/migrations/__init__.py
Normal file
155
app/hr/models.py
Normal file
155
app/hr/models.py
Normal file
@@ -0,0 +1,155 @@
|
||||
from datetime import datetime
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from eve_api.models import EVEPlayerCharacter, EVEPlayerCorporation
|
||||
from eve_api.app_defines import *
|
||||
from hr.app_defines import *
|
||||
|
||||
class Application(models.Model):
|
||||
""" Person's application to a corporation """
|
||||
|
||||
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.")
|
||||
application_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date")
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
return ('hr.views.view_application', [self.id])
|
||||
|
||||
@property
|
||||
def blacklisted(self):
|
||||
from hr.utils import blacklist_values
|
||||
if len(self.blacklist_values) > 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
@property
|
||||
def blacklist_values(self):
|
||||
from hr.utils import blacklist_values
|
||||
return blacklist_values(self.user)
|
||||
|
||||
@property
|
||||
def last_action(self):
|
||||
if self.audit_set.count():
|
||||
return self.audit_set.all().order_by('-date')[0]
|
||||
return None
|
||||
|
||||
@property
|
||||
def alt_application(self):
|
||||
if EVEPlayerCharacter.objects.filter(corporation=self.corporation, eveaccount__user=self.user).count() > 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
user = None
|
||||
if 'user' in kwargs:
|
||||
user = kwargs['user']
|
||||
del kwargs['user']
|
||||
|
||||
try:
|
||||
old_instance = Application.objects.get(id=self.id)
|
||||
if not (old_instance.status == int(self.status)):
|
||||
event = Audit(application=self)
|
||||
event.user = user
|
||||
event.event = AUDIT_EVENT_STATUSCHANGE
|
||||
|
||||
# Save the application so we can get a up to date status
|
||||
super(Application, self).save(*args, **kwargs)
|
||||
new_instance = Application.objects.get(id=self.id)
|
||||
|
||||
event.text = "Status changed from %s to %s" % (old_instance.get_status_display(), new_instance.get_status_display())
|
||||
event.save()
|
||||
except:
|
||||
pass
|
||||
|
||||
super(Application, self).save(*args, **kwargs)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.character.name
|
||||
|
||||
class Meta:
|
||||
permissions = (
|
||||
("can_accept", "Can accept / reject applications"),
|
||||
("can_view_all", "Can view all applications"),
|
||||
("can_view_corp", "Can view corp applications"),
|
||||
)
|
||||
|
||||
class Recommendation(models.Model):
|
||||
""" User recommendation for a application """
|
||||
|
||||
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")
|
||||
recommendation_date = models.DateTimeField(auto_now_add=True, verbose_name="Recommendation Date")
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
return ('hr.views.view_application', [self.application.id])
|
||||
|
||||
@property
|
||||
def is_valid(self):
|
||||
diff = self.recommendation_date - self.user_character.corporation_date
|
||||
if self.user_character.eveaccount_set.count() and self.user_character.eveaccount_set.all()[0].api_status == API_STATUS_OK and diff.days >= settings.HR_RECOMMENDATION_DAYS and self.user_character.corporation == self.application.corporation:
|
||||
return True
|
||||
return False
|
||||
|
||||
def __unicode__(self):
|
||||
return self.user_character.name
|
||||
|
||||
|
||||
class Audit(models.Model):
|
||||
""" Auditing information regarding a application """
|
||||
|
||||
application = models.ForeignKey(Application, blank=False, verbose_name="Application")
|
||||
user = models.ForeignKey(User, blank=True, verbose_name="User")
|
||||
event = models.IntegerField(choices=AUDIT_EVENT_CHOICES,
|
||||
verbose_name="Event Type",
|
||||
help_text="Type of audit event")
|
||||
text = models.TextField(blank=False, verbose_name="Event Text",
|
||||
help_text="Detailed event text")
|
||||
date = models.DateTimeField(auto_now_add=True, verbose_name="Event Date")
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
return ('hr.views.view_application', [self.application.id])
|
||||
|
||||
def __unicode__(self):
|
||||
return u"(%s) %s: %s" % (self.get_event_display(), self.user, self.text)
|
||||
|
||||
|
||||
class BlacklistSource(models.Model):
|
||||
""" Blacklist Source """
|
||||
|
||||
name = models.CharField("Blacklist Source Name", max_length=255, blank=False)
|
||||
ticker = models.CharField("Blacklist Source Ticker", max_length=255, blank=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Blacklist(models.Model):
|
||||
""" Blacklisted entries, stops people who match the criteria from applying """
|
||||
|
||||
type = models.IntegerField(choices=BLACKLIST_TYPE_CHOICES,
|
||||
verbose_name="Blacklisted Type",
|
||||
help_text="Type of entity to be blacklisted")
|
||||
value = models.CharField("Blacklisted Value", max_length=255, blank=False)
|
||||
reason = models.TextField(blank=False, verbose_name="Reason",
|
||||
help_text="Reason that the entity was blacklisted")
|
||||
expiry_date = models.DateTimeField(verbose_name="Expiry Date", blank=False, null=True,
|
||||
help_text="Date to expire this entry")
|
||||
source = models.ForeignKey(BlacklistSource, blank=False, verbose_name="Source")
|
||||
created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date")
|
||||
created_by = models.ForeignKey(User, blank=False, verbose_name="Created By")
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s: %s' % (self.get_type_display(), self.value)
|
||||
27
app/hr/tasks.py
Normal file
27
app/hr/tasks.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from django.conf import settings
|
||||
import logging
|
||||
from datetime import datetime, timedelta
|
||||
from celery.decorators import task
|
||||
from hr.utils import blacklist_values
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.mail import send_mail
|
||||
|
||||
@task(ignore_result=True)
|
||||
def blacklist_check():
|
||||
log = blacklist_check.get_logger()
|
||||
|
||||
users = User.objects.filter(is_active=True)
|
||||
|
||||
for u in users:
|
||||
if u.groups.count() > 0:
|
||||
# Has groups
|
||||
val = blacklist_values(u)
|
||||
if len(val) > 0:
|
||||
# Report possible issue
|
||||
log.warning("Suspect User: %s, %s entries found: %s" % (u.username, len(val), val))
|
||||
|
||||
blstr = ""
|
||||
for i in val:
|
||||
blstr = "%s%s - %s - %s\n" % (blstr, i.get_type_display(), i.value, i.reason)
|
||||
msg = "Suspect User found: %s\nGroups: %s\nBlacklist Items:\n\n%s" % (u.username, u.groups.all(), blstr)
|
||||
send_mail('Automated blacklist checker alert - %s' % u.username, msg, 'blacklist@pleaseignore.com', ['abuse@pleaseignore.com'])
|
||||
14
app/hr/templates/hr/applications/accept.html
Normal file
14
app/hr/templates/hr/applications/accept.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Accept Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>Fill in a note you want to send to the user.</p>
|
||||
<form action="{% url hr.views.accept_application applicationid %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{% csrf_token %}
|
||||
</table>
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
15
app/hr/templates/hr/applications/add.html
Normal file
15
app/hr/templates/hr/applications/add.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Create Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>Select the character you wish to apply with, then the corporation you wish to apply for.</p>
|
||||
|
||||
<form action="{% url hr.views.add_application %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
13
app/hr/templates/hr/applications/add_message.html
Normal file
13
app/hr/templates/hr/applications/add_message.html
Normal file
@@ -0,0 +1,13 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Send Message to Applicant{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form action="{% url hr.views.add_message applicationid %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
13
app/hr/templates/hr/applications/add_note.html
Normal file
13
app/hr/templates/hr/applications/add_note.html
Normal file
@@ -0,0 +1,13 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Add Note to Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form action="{% url hr.views.add_note applicationid %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
35
app/hr/templates/hr/applications/admin/view_list.html
Normal file
35
app/hr/templates/hr/applications/admin/view_list.html
Normal file
@@ -0,0 +1,35 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Applications{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h3>Search All Applications</h3>
|
||||
<form method="GET" action="{% url hr.views.admin_applications %}">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="Search" />
|
||||
</form>
|
||||
|
||||
{% if apps %}
|
||||
<table>
|
||||
<tr><th><a href="{% url hr.views.admin_applications %}?o=id">Application ID</a></th>
|
||||
<th><a href="{% url hr.views.admin_applications %}?o=character">Character</a></th>
|
||||
<th><a href="{% url hr.views.admin_applications %}?o=corporation">Corporation</a></th>
|
||||
<th>Application Status</th>
|
||||
<th>Last Action Date</th>
|
||||
<th>Last Action User</th></tr>
|
||||
{% for app in apps %}
|
||||
<tr {% if app.alt_application %}id="alt-application"{% endif %}><td><a href="{% url hr.views.view_application app.id %}">{{ app.id }}</a></td>
|
||||
<td>{{ app.character }}</td>
|
||||
<td>{{ app.corporation }}</td>
|
||||
<td>{{ app.get_status_display }}</td>
|
||||
<td>{{ app.last_action.date }}</td>
|
||||
<td>{{ app.last_action.user }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>No applications found.</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
7
app/hr/templates/hr/applications/noadd.html
Normal file
7
app/hr/templates/hr/applications/noadd.html
Normal file
@@ -0,0 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Create Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>Unfortunatly, no Corporations are accepting applications at the moment.</p>
|
||||
{% endblock %}
|
||||
14
app/hr/templates/hr/applications/reject.html
Normal file
14
app/hr/templates/hr/applications/reject.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Reject Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>Fill in the rejection reason below, please note, this will be sent out to the user.</p>
|
||||
<form action="{% url hr.views.reject_application applicationid %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
173
app/hr/templates/hr/applications/view.html
Normal file
173
app/hr/templates/hr/applications/view.html
Normal file
@@ -0,0 +1,173 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% load humanize %}
|
||||
{% load if_extra %}
|
||||
{% load installed %}
|
||||
|
||||
{% block title %}View Application{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h3>Application Details</h3>
|
||||
|
||||
<ul>
|
||||
<li>Applying Auth User: <a href="{% url sso.views.user_view app.user %}">{{ app.user }}</a></li>
|
||||
<li>Applying Character: <a href="{% url eve_api.views.eveapi_character app.character.id %}">{{ app.character }}</a></li>
|
||||
<li>Applying To: <a href="{% url eve_api.views.eveapi_corporation app.corporation.id %}">{{ app.corporation }}</a></li>
|
||||
<li>Application Status: <b>{{ app.get_status_display }}</b></li>
|
||||
<li>Blacklist Status: <b>{% if app.blacklisted %}<font color='red'>BLACKLISTED</font>{% else %}<font color='geen'>OK</font>{% endif %}</b></li>
|
||||
</ul>
|
||||
|
||||
{% ifnotequal app.status 5 %}
|
||||
<h3>Actions</h3>
|
||||
<div class="skill_controls">
|
||||
<p>
|
||||
{% if app.status < 1 %}
|
||||
<a href="{% url hr.views.update_application app.id 1 %}">Submit Application</a>
|
||||
{% else %}
|
||||
<a href="{% url hr.views.update_application app.id 0 %}">Withdraw Application</a>
|
||||
{% endif %}
|
||||
<a href="{% url hr.views.add_message app.id %}">Add Message</a>
|
||||
{% if hrstaff %}
|
||||
<a href="{% url hr.views.add_note app.id %}">Add Staff Note</a>
|
||||
{% if app.status < 2 or app.status = 4 or app.status = 6 %}
|
||||
{% if perms.hr.can_accept %}
|
||||
<a href="{% url hr.views.reject_application app.id %}">Reject Application</a>
|
||||
{% ifequal app.blacklisted 0 %}
|
||||
<a href="{% url hr.views.accept_application app.id %}">Accept Application</a>
|
||||
{% endifequal %}
|
||||
{% endif %}
|
||||
{% ifnotequal app.status 4 %}
|
||||
<a href="{% url hr.views.update_application app.id 4 %}">Mark as In Query</a>
|
||||
{% endifnotequal %}
|
||||
{% ifnotequal app.status 6 %}
|
||||
<a href="{% url hr.views.update_application app.id 6 %}">Flag for Review</a>
|
||||
{% endifnotequal %}
|
||||
{% endif %}
|
||||
{% ifequal app.status 3 %}
|
||||
<a href="{% url hr.views.update_application app.id 5 %}">Mark as Complete</a>
|
||||
{% endifequal %}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
|
||||
{% if audit %}
|
||||
<h3>Event Log</h3>
|
||||
<table width="100%">
|
||||
<tr><th width="50px">Event Type</th><th width="75px">User</th><th width="50px">Date</th><th>Event Details</th></tr>
|
||||
{% for a in audit %}
|
||||
<tr><td>{{ a.get_event_display }}</td><td>{{ a.user }}</td><td>{{ a.date|date:"Y/m/d H:i:s" }}</td><td>{{ a.text|linebreaks }}</td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if app.blacklisted %}
|
||||
<h3>Blacklist Triggers</h3>
|
||||
<table>
|
||||
<tr><th>Blacklist Type</th><th>Blacklisted Value</th><th>Reason</th><th>Source</th></tr>
|
||||
{% for a in app.blacklist_values %}
|
||||
<tr><td>{{ a.get_type_display }}</td><td>{{ a.value }}</td><td>{{ a.reason }}</td><td>{{ a.source }}</td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if app.recommendation_set.all %}
|
||||
<h3>Recommendations</h3>
|
||||
<table>
|
||||
<tr><th>User</th><th>Character</th><th>Corporation</th><th>Valid Recommendation</th><th>Total User Recomendations</th></tr>
|
||||
{% for rec in app.recommendation_set.all %}
|
||||
<tr><td><a href="{% url sso.views.user_view rec.user %}">{{ rec.user }}</a></td>
|
||||
<td><a href="{% url eve_api.views.eveapi_character rec.user_character.id %}">{{ rec.user_character }}</a></td>
|
||||
<td><a href="http://evemaps.dotlan.net/corp/{{ rec.user_character.corporation.name }}">{{ rec.user_character.corporation }}</a></td>
|
||||
<td>{% if rec.is_valid %}<font color="green">Yes</font>{% else %}<font color="red">No</font>{% endif %}</td>
|
||||
<td>{{ rec.user.recommendation_set.all.count }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if hrstaff %}
|
||||
<h3>EVE Characters</h3>
|
||||
<table>
|
||||
<tr><th>Character</th><th>Corp / Alliance</th><th>ISK</th><th>SP</th><th>Links</th></tr>
|
||||
{% for acc in app.user.eveaccount_set.all %}
|
||||
{% for char in acc.characters.all %}
|
||||
<tr><td><a href="{% url eve_api.views.eveapi_character char.id %}">{{ char.name }}</a></td>
|
||||
<td><a href="http://evemaps.dotlan.net/corp/{{ char.corporation }}">{{ char.corporation }}</a>{% if char.corporation.alliance %} /
|
||||
<a href="http://evemaps.dotlan.net/alliance/{{ char.corporation.alliance }}">{{ char.corporation.alliance }}</a>{% endif %}
|
||||
</td>
|
||||
<td align="right">{{ char.balance|intcomma }} ISK</td>
|
||||
<td align="right">{{ char.total_sp|intcomma }} SP</td>
|
||||
<td>{% if request.is_igb %}<a href="javascript:CCPEVE.showInfo(1377, {{ char.id }})">Show In Eve</a> / {% endif %}<a href="https://gate.eveonline.com/Profile/{{ char.name }}/">EveGate Profile</a> / <a href="http://eve-search.com/search/author/{{ char.name }}">EveSearch</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% if "reddit"|installed %}
|
||||
{% if app.user.redditaccount_set.all %}
|
||||
<h3>Reddit Accounts</h3>
|
||||
<table>
|
||||
<tr><th>Account</th><th>Karma</th><th>Validated</th><th>Creation Date</th><th>Matches Criteria?</th></tr>
|
||||
{% for acc in app.user.redditaccount_set.all %}
|
||||
<tr><td><a href="http://reddit.com/user/{{ acc.username }}/">{{ acc.username }}</a></td>
|
||||
<td>{{ acc.link_karma }} / {{ acc.comment_karma }}</td>
|
||||
<td>{% if acc.validated %}Validated{%else %}<b>NOT VALIDATED</b>{% endif %}</td>
|
||||
<td>{{ acc.date_created }}</td>
|
||||
<td>{% if acc.is_valid %}<font color="green">Yes</font>{% else %}<font color="red">No</font>{% endif %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<h3>Recent Reddit Posts</h3>
|
||||
|
||||
<span id="loadlink">
|
||||
<a href="javascript:redditposts()">Load recent Reddit posts</a>
|
||||
</span>
|
||||
|
||||
<script type="text/javascript">
|
||||
function createRequestObject() {
|
||||
var ro;
|
||||
var browser = navigator.appName;
|
||||
if(browser == "Microsoft Internet Explorer"){
|
||||
ro = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}else{
|
||||
ro = new XMLHttpRequest();
|
||||
}
|
||||
return ro;
|
||||
}
|
||||
|
||||
var http = createRequestObject();
|
||||
|
||||
function redditposts(action) {
|
||||
http.open('get', '{% url hr.views.view_application app.id %}?redditxhr');
|
||||
http.onreadystatechange = handleResponse;
|
||||
http.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
http.send(null);
|
||||
}
|
||||
|
||||
function handleResponse() {
|
||||
if(http.readyState == 4){
|
||||
var response = eval('(' + http.responseText + ')');
|
||||
var update = new Array();
|
||||
|
||||
document.getElementById('loadlink').style.display = 'none';
|
||||
|
||||
var out = '';
|
||||
for (var obj in response) {
|
||||
if (response[obj]['kind'] == 2) {
|
||||
var out = out + "<p><b><a href=\"http://reddit.com" + response[obj]['permalink'] + "\">" + response[obj]['title'] + "</a></b> - (/r/" + response[obj]['subreddit']+ ")</p>";
|
||||
} else {
|
||||
var out = out + "<p>" + response[obj]['body'] + "<br/><b>/r/" + response[obj]['subreddit'] + "</b> <a href=\"" + response[obj]['permalink'] + "\">Permalink</a></p>";
|
||||
}
|
||||
}
|
||||
document.getElementById('redditposts').innerHTML = out;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="redditposts">
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
22
app/hr/templates/hr/applications/view_list.html
Normal file
22
app/hr/templates/hr/applications/view_list.html
Normal file
@@ -0,0 +1,22 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Applications{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>This list shows your current open applications</p>
|
||||
{% if apps %}
|
||||
<table>
|
||||
<tr><th>Application ID</th><th>Character</th><th>Corporation</th><th>Application Status</th></tr>
|
||||
{% for app in apps %}
|
||||
<tr><td><a href="{% url hr.views.view_application app.id %}">{{ app.id }}</a></td>
|
||||
<td>{{ app.character }}</td>
|
||||
<td>{{ app.corporation }}</td>
|
||||
<td>{{ app.get_status_display }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>You have no current applications</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
13
app/hr/templates/hr/emails/accepted.txt
Normal file
13
app/hr/templates/hr/emails/accepted.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Hi {{ app.character }},
|
||||
|
||||
Congratulations, Your application to {{ app.corporation }} has been accepted. You will be accepted into the {{ app.corporation }} within the next 24 hours.
|
||||
|
||||
{% if note %}
|
||||
{{ note }}
|
||||
{% endif %}
|
||||
|
||||
If you have any further questions regarding your application, please contact {{ app.corporation }} via the normal channels.
|
||||
|
||||
Regards,
|
||||
|
||||
{{ app.corporation }} HR Bot
|
||||
1
app/hr/templates/hr/emails/accepted_subject.txt
Normal file
1
app/hr/templates/hr/emails/accepted_subject.txt
Normal file
@@ -0,0 +1 @@
|
||||
Application to {{ app.corporation }} accepted.
|
||||
13
app/hr/templates/hr/emails/message.txt
Normal file
13
app/hr/templates/hr/emails/message.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Hi {{ app.character }},
|
||||
|
||||
A message was sent to you regarding your current application to {{ app.corporation }}:
|
||||
|
||||
{% if note %}
|
||||
{{ note }}
|
||||
{% endif %}
|
||||
|
||||
If you have any further questions regarding your application, please contact {{ app.corporation }} via the normal channels.
|
||||
|
||||
Regards,
|
||||
|
||||
{{ app.corporation }} HR Bot
|
||||
1
app/hr/templates/hr/emails/message_subject.txt
Normal file
1
app/hr/templates/hr/emails/message_subject.txt
Normal file
@@ -0,0 +1 @@
|
||||
A message regarding your application to {{ app.corporation }}.
|
||||
15
app/hr/templates/hr/emails/rejected.txt
Normal file
15
app/hr/templates/hr/emails/rejected.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Hi {{ app.character }},
|
||||
|
||||
Your application to {{ app.corporation }} has been rejected.
|
||||
|
||||
{% if note %}
|
||||
{{ note }}
|
||||
{% else %}
|
||||
One of our Personnel people will contact you in a seperate method to explain why you have been rejected.
|
||||
{% endif %}
|
||||
|
||||
If you have any further questions regarding your application, please contact {{ app.corporation }} via the normal channels.
|
||||
|
||||
Regards,
|
||||
|
||||
{{ app.corporation }} HR Bot
|
||||
1
app/hr/templates/hr/emails/rejected_subject.txt
Normal file
1
app/hr/templates/hr/emails/rejected_subject.txt
Normal file
@@ -0,0 +1 @@
|
||||
Application to {{ app.corporation }} rejected.
|
||||
22
app/hr/templates/hr/index.html
Normal file
22
app/hr/templates/hr/index.html
Normal file
@@ -0,0 +1,22 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}HR{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h3>Applications</h3>
|
||||
<p><a href="{% url hr.views.view_applications %}">View your current open applications</a><br/>
|
||||
<a href="{% url hr.views.add_application %}">Create a application</a><br/></p>
|
||||
<h3>Recommendations</h3>
|
||||
<p>
|
||||
<a href="{% url hr.views.view_recommendations %}">View your current open recommendations</a><br/>
|
||||
<a href="{% url hr.views.add_recommendation %}">Add a recommendation</a><br/>
|
||||
</p>
|
||||
|
||||
{% if hrstaff %}
|
||||
<h3>HR Admin</h3>
|
||||
<p>
|
||||
<a href="{% url hr.views.admin_applications %}">View applications</a><br/>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
17
app/hr/templates/hr/recommendations/add.html
Normal file
17
app/hr/templates/hr/recommendations/add.html
Normal file
@@ -0,0 +1,17 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Add Recommendation{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>Select a character you wish to recommend from, then select your friend's current application.
|
||||
|
||||
The person you are recommending needs to have created their application before you can add a recommendation.</p>
|
||||
|
||||
<form action="{% url hr.views.add_recommendation %}" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Add Recommendation" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
26
app/hr/templates/hr/recommendations/view_list.html
Normal file
26
app/hr/templates/hr/recommendations/view_list.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Recommendations{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>This list shows your current open recommendations that are yet to be submitted, as
|
||||
soon as the recommended user submits their application your recommendation will be removed from this list.</p>
|
||||
{% if recs %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Recommender</th><th>Recommended Application</th><th>Application Status</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rec in recs %}
|
||||
<tr><td>{{ rec.user_character }}</td>
|
||||
<td>{{ rec.application }}</td>
|
||||
<td>{{ rec.application.get_status_display }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>You have no current recommendations</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
0
app/hr/templatetags/__init__.py
Normal file
0
app/hr/templatetags/__init__.py
Normal file
401
app/hr/templatetags/if_extra.py
Normal file
401
app/hr/templatetags/if_extra.py
Normal file
@@ -0,0 +1,401 @@
|
||||
"""
|
||||
A smarter {% if %} tag for django templates.
|
||||
|
||||
While retaining current Django functionality, it also handles equality,
|
||||
greater than and less than operators. Some common case examples::
|
||||
|
||||
{% if articles|length >= 5 %}...{% endif %}
|
||||
{% if "ifnotequal tag" != "beautiful" %}...{% endif %}
|
||||
"""
|
||||
import unittest
|
||||
from django import template
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
#==============================================================================
|
||||
# Calculation objects
|
||||
#==============================================================================
|
||||
|
||||
class BaseCalc(object):
|
||||
def __init__(self, var1, var2=None, negate=False):
|
||||
self.var1 = var1
|
||||
self.var2 = var2
|
||||
self.negate = negate
|
||||
|
||||
def resolve(self, context):
|
||||
try:
|
||||
var1, var2 = self.resolve_vars(context)
|
||||
outcome = self.calculate(var1, var2)
|
||||
except:
|
||||
outcome = False
|
||||
if self.negate:
|
||||
return not outcome
|
||||
return outcome
|
||||
|
||||
def resolve_vars(self, context):
|
||||
var2 = self.var2 and self.var2.resolve(context)
|
||||
return self.var1.resolve(context), var2
|
||||
|
||||
def calculate(self, var1, var2):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class Or(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 or var2
|
||||
|
||||
|
||||
class And(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 and var2
|
||||
|
||||
|
||||
class Equals(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 == var2
|
||||
|
||||
|
||||
class Greater(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 > var2
|
||||
|
||||
|
||||
class GreaterOrEqual(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 >= var2
|
||||
|
||||
|
||||
class In(BaseCalc):
|
||||
def calculate(self, var1, var2):
|
||||
return var1 in var2
|
||||
|
||||
|
||||
#==============================================================================
|
||||
# Tests
|
||||
#==============================================================================
|
||||
|
||||
class TestVar(object):
|
||||
"""
|
||||
A basic self-resolvable object similar to a Django template variable. Used
|
||||
to assist with tests.
|
||||
"""
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def resolve(self, context):
|
||||
return self.value
|
||||
|
||||
|
||||
class SmartIfTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.true = TestVar(True)
|
||||
self.false = TestVar(False)
|
||||
self.high = TestVar(9000)
|
||||
self.low = TestVar(1)
|
||||
|
||||
def assertCalc(self, calc, context=None):
|
||||
"""
|
||||
Test a calculation is True, also checking the inverse "negate" case.
|
||||
"""
|
||||
context = context or {}
|
||||
self.assert_(calc.resolve(context))
|
||||
calc.negate = not calc.negate
|
||||
self.assertFalse(calc.resolve(context))
|
||||
|
||||
def assertCalcFalse(self, calc, context=None):
|
||||
"""
|
||||
Test a calculation is False, also checking the inverse "negate" case.
|
||||
"""
|
||||
context = context or {}
|
||||
self.assertFalse(calc.resolve(context))
|
||||
calc.negate = not calc.negate
|
||||
self.assert_(calc.resolve(context))
|
||||
|
||||
def test_or(self):
|
||||
self.assertCalc(Or(self.true))
|
||||
self.assertCalcFalse(Or(self.false))
|
||||
self.assertCalc(Or(self.true, self.true))
|
||||
self.assertCalc(Or(self.true, self.false))
|
||||
self.assertCalc(Or(self.false, self.true))
|
||||
self.assertCalcFalse(Or(self.false, self.false))
|
||||
|
||||
def test_and(self):
|
||||
self.assertCalc(And(self.true, self.true))
|
||||
self.assertCalcFalse(And(self.true, self.false))
|
||||
self.assertCalcFalse(And(self.false, self.true))
|
||||
self.assertCalcFalse(And(self.false, self.false))
|
||||
|
||||
def test_equals(self):
|
||||
self.assertCalc(Equals(self.low, self.low))
|
||||
self.assertCalcFalse(Equals(self.low, self.high))
|
||||
|
||||
def test_greater(self):
|
||||
self.assertCalc(Greater(self.high, self.low))
|
||||
self.assertCalcFalse(Greater(self.low, self.low))
|
||||
self.assertCalcFalse(Greater(self.low, self.high))
|
||||
|
||||
def test_greater_or_equal(self):
|
||||
self.assertCalc(GreaterOrEqual(self.high, self.low))
|
||||
self.assertCalc(GreaterOrEqual(self.low, self.low))
|
||||
self.assertCalcFalse(GreaterOrEqual(self.low, self.high))
|
||||
|
||||
def test_in(self):
|
||||
list_ = TestVar([1,2,3])
|
||||
invalid_list = TestVar(None)
|
||||
self.assertCalc(In(self.low, list_))
|
||||
self.assertCalcFalse(In(self.low, invalid_list))
|
||||
|
||||
def test_parse_bits(self):
|
||||
var = IfParser([True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
var = IfParser([False]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
var = IfParser([False, 'or', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([False, 'and', True]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
var = IfParser(['not', False, 'and', 'not', False]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser(['not', 'not', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([1, '=', 1]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([1, 'not', '=', 1]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
var = IfParser([1, 'not', 'not', '=', 1]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([1, '!=', 1]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
var = IfParser([3, '>', 2]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([1, '<', 2]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([2, 'not', 'in', [2, 3]]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
var = IfParser([1, 'or', 1, '=', 2]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
def test_boolean(self):
|
||||
var = IfParser([True, 'and', True, 'and', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
var = IfParser([False, 'or', False, 'or', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
var = IfParser([True, 'and', False, 'or', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
var = IfParser([False, 'or', True, 'and', True]).parse()
|
||||
self.assert_(var.resolve({}))
|
||||
|
||||
var = IfParser([True, 'and', True, 'and', False]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
var = IfParser([False, 'or', False, 'or', False]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
var = IfParser([False, 'or', True, 'and', False]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
var = IfParser([False, 'and', True, 'or', False]).parse()
|
||||
self.assertFalse(var.resolve({}))
|
||||
|
||||
def test_invalid(self):
|
||||
self.assertRaises(ValueError, IfParser(['not']).parse)
|
||||
self.assertRaises(ValueError, IfParser(['==']).parse)
|
||||
self.assertRaises(ValueError, IfParser([1, 'in']).parse)
|
||||
self.assertRaises(ValueError, IfParser([1, '>', 'in']).parse)
|
||||
self.assertRaises(ValueError, IfParser([1, '==', 'not', 'not']).parse)
|
||||
self.assertRaises(ValueError, IfParser([1, 2]).parse)
|
||||
|
||||
|
||||
OPERATORS = {
|
||||
'=': (Equals, True),
|
||||
'==': (Equals, True),
|
||||
'!=': (Equals, False),
|
||||
'>': (Greater, True),
|
||||
'>=': (GreaterOrEqual, True),
|
||||
'<=': (Greater, False),
|
||||
'<': (GreaterOrEqual, False),
|
||||
'or': (Or, True),
|
||||
'and': (And, True),
|
||||
'in': (In, True),
|
||||
}
|
||||
BOOL_OPERATORS = ('or', 'and')
|
||||
|
||||
|
||||
class IfParser(object):
|
||||
error_class = ValueError
|
||||
|
||||
def __init__(self, tokens):
|
||||
self.tokens = tokens
|
||||
|
||||
def _get_tokens(self):
|
||||
return self._tokens
|
||||
|
||||
def _set_tokens(self, tokens):
|
||||
self._tokens = tokens
|
||||
self.len = len(tokens)
|
||||
self.pos = 0
|
||||
|
||||
tokens = property(_get_tokens, _set_tokens)
|
||||
|
||||
def parse(self):
|
||||
if self.at_end():
|
||||
raise self.error_class('No variables provided.')
|
||||
var1 = self.get_bool_var()
|
||||
while not self.at_end():
|
||||
op, negate = self.get_operator()
|
||||
var2 = self.get_bool_var()
|
||||
var1 = op(var1, var2, negate=negate)
|
||||
return var1
|
||||
|
||||
def get_token(self, eof_message=None, lookahead=False):
|
||||
negate = True
|
||||
token = None
|
||||
pos = self.pos
|
||||
while token is None or token == 'not':
|
||||
if pos >= self.len:
|
||||
if eof_message is None:
|
||||
raise self.error_class()
|
||||
raise self.error_class(eof_message)
|
||||
token = self.tokens[pos]
|
||||
negate = not negate
|
||||
pos += 1
|
||||
if not lookahead:
|
||||
self.pos = pos
|
||||
return token, negate
|
||||
|
||||
def at_end(self):
|
||||
return self.pos >= self.len
|
||||
|
||||
def create_var(self, value):
|
||||
return TestVar(value)
|
||||
|
||||
def get_bool_var(self):
|
||||
"""
|
||||
Returns either a variable by itself or a non-boolean operation (such as
|
||||
``x == 0`` or ``x < 0``).
|
||||
|
||||
This is needed to keep correct precedence for boolean operations (i.e.
|
||||
``x or x == 0`` should be ``x or (x == 0)``, not ``(x or x) == 0``).
|
||||
"""
|
||||
var = self.get_var()
|
||||
if not self.at_end():
|
||||
op_token = self.get_token(lookahead=True)[0]
|
||||
if isinstance(op_token, basestring) and (op_token not in
|
||||
BOOL_OPERATORS):
|
||||
op, negate = self.get_operator()
|
||||
return op(var, self.get_var(), negate=negate)
|
||||
return var
|
||||
|
||||
def get_var(self):
|
||||
token, negate = self.get_token('Reached end of statement, still '
|
||||
'expecting a variable.')
|
||||
if isinstance(token, basestring) and token in OPERATORS:
|
||||
raise self.error_class('Expected variable, got operator (%s).' %
|
||||
token)
|
||||
var = self.create_var(token)
|
||||
if negate:
|
||||
return Or(var, negate=True)
|
||||
return var
|
||||
|
||||
def get_operator(self):
|
||||
token, negate = self.get_token('Reached end of statement, still '
|
||||
'expecting an operator.')
|
||||
if not isinstance(token, basestring) or token not in OPERATORS:
|
||||
raise self.error_class('%s is not a valid operator.' % token)
|
||||
if self.at_end():
|
||||
raise self.error_class('No variable provided after "%s".' % token)
|
||||
op, true = OPERATORS[token]
|
||||
if not true:
|
||||
negate = not negate
|
||||
return op, negate
|
||||
|
||||
|
||||
#==============================================================================
|
||||
# Actual templatetag code.
|
||||
#==============================================================================
|
||||
|
||||
class TemplateIfParser(IfParser):
|
||||
error_class = template.TemplateSyntaxError
|
||||
|
||||
def __init__(self, parser, *args, **kwargs):
|
||||
self.template_parser = parser
|
||||
return super(TemplateIfParser, self).__init__(*args, **kwargs)
|
||||
|
||||
def create_var(self, value):
|
||||
return self.template_parser.compile_filter(value)
|
||||
|
||||
|
||||
class SmartIfNode(template.Node):
|
||||
def __init__(self, var, nodelist_true, nodelist_false=None):
|
||||
self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
|
||||
self.var = var
|
||||
|
||||
def render(self, context):
|
||||
if self.var.resolve(context):
|
||||
return self.nodelist_true.render(context)
|
||||
if self.nodelist_false:
|
||||
return self.nodelist_false.render(context)
|
||||
return ''
|
||||
|
||||
def __repr__(self):
|
||||
return "<Smart If node>"
|
||||
|
||||
def __iter__(self):
|
||||
for node in self.nodelist_true:
|
||||
yield node
|
||||
if self.nodelist_false:
|
||||
for node in self.nodelist_false:
|
||||
yield node
|
||||
|
||||
def get_nodes_by_type(self, nodetype):
|
||||
nodes = []
|
||||
if isinstance(self, nodetype):
|
||||
nodes.append(self)
|
||||
nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype))
|
||||
if self.nodelist_false:
|
||||
nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype))
|
||||
return nodes
|
||||
|
||||
|
||||
@register.tag('if')
|
||||
def smart_if(parser, token):
|
||||
"""
|
||||
A smarter {% if %} tag for django templates.
|
||||
|
||||
While retaining current Django functionality, it also handles equality,
|
||||
greater than and less than operators. Some common case examples::
|
||||
|
||||
{% if articles|length >= 5 %}...{% endif %}
|
||||
{% if "ifnotequal tag" != "beautiful" %}...{% endif %}
|
||||
|
||||
Arguments and operators _must_ have a space between them, so
|
||||
``{% if 1>2 %}`` is not a valid smart if tag.
|
||||
|
||||
All supported operators are: ``or``, ``and``, ``in``, ``=`` (or ``==``),
|
||||
``!=``, ``>``, ``>=``, ``<`` and ``<=``.
|
||||
"""
|
||||
bits = token.split_contents()[1:]
|
||||
var = TemplateIfParser(parser, bits).parse()
|
||||
nodelist_true = parser.parse(('else', 'endif'))
|
||||
token = parser.next_token()
|
||||
if token.contents == 'else':
|
||||
nodelist_false = parser.parse(('endif',))
|
||||
parser.delete_first_token()
|
||||
else:
|
||||
nodelist_false = None
|
||||
return SmartIfNode(var, nodelist_true, nodelist_false)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
23
app/hr/tests.py
Normal file
23
app/hr/tests.py
Normal 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
|
||||
"""}
|
||||
|
||||
20
app/hr/urls.py
Normal file
20
app/hr/urls.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
from hr import views
|
||||
|
||||
urlpatterns = patterns('',
|
||||
('^$', views.index),
|
||||
(r'^recommendation/$', views.view_recommendations),
|
||||
(r'^application/$', views.view_applications),
|
||||
(r'^application/(?P<applicationid>\d+)/$', views.view_application),
|
||||
(r'^application/(?P<applicationid>\d+)/update/(?P<status>\d+)/$', views.update_application),
|
||||
(r'^application/(?P<applicationid>\d+)/note/$', views.add_note),
|
||||
(r'^application/(?P<applicationid>\d+)/message/$', views.add_message),
|
||||
(r'^application/(?P<applicationid>\d+)/reject/$', views.reject_application),
|
||||
(r'^application/(?P<applicationid>\d+)/accept/$', views.accept_application),
|
||||
|
||||
(r'^application/add/$', views.add_application),
|
||||
(r'^recommendation/add/$', views.add_recommendation),
|
||||
|
||||
(r'^application/admin$', views.admin_applications),
|
||||
)
|
||||
65
app/hr/utils.py
Normal file
65
app/hr/utils.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from datetime import datetime
|
||||
from hr.app_defines import *
|
||||
from hr.models import Blacklist
|
||||
from django.db import models
|
||||
from eve_api.models import EVEPlayerCharacter
|
||||
|
||||
def installed(value):
|
||||
from django.conf import settings
|
||||
apps = settings.INSTALLED_APPS
|
||||
if "." in value:
|
||||
for app in apps:
|
||||
if app == value:
|
||||
return True
|
||||
else:
|
||||
for app in apps:
|
||||
fields = app.split(".")
|
||||
if fields[-1] == value:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def blacklist_values(user):
|
||||
"""
|
||||
Returns a list of blacklist values that apply to the application
|
||||
"""
|
||||
|
||||
blacklist = []
|
||||
bl_items = Blacklist.objects.filter(models.Q(expiry_date__gt=datetime.now()) | models.Q(expiry_date=None))
|
||||
|
||||
# Check Reddit blacklists
|
||||
if installed('reddit'):
|
||||
reddit_uids = user.redditaccount_set.all().values_list('username', flat=True)
|
||||
objs = bl_items.filter(type=BLACKLIST_TYPE_REDDIT, value__in=reddit_uids)
|
||||
blacklist.extend(objs)
|
||||
|
||||
# Check email blacklists
|
||||
blacklist.extend(bl_items.filter(type=BLACKLIST_TYPE_EMAIL, value=user.email.lower()))
|
||||
|
||||
# Check Auth blacklists
|
||||
blacklist.extend(bl_items.filter(type=BLACKLIST_TYPE_AUTH, value=user.username.lower()))
|
||||
|
||||
# Check EVE Related blacklists
|
||||
evechars = EVEPlayerCharacter.objects.filter(eveaccount__user=user).select_related('corporation__alliance')
|
||||
|
||||
# Check Character blacklists
|
||||
characters = evechars.values_list('name', flat=True)
|
||||
objs = bl_items.filter(type=BLACKLIST_TYPE_CHARACTER, value__in=characters)
|
||||
blacklist.extend(objs)
|
||||
|
||||
# Check Corporation blacklists
|
||||
corporations = evechars.values_list('corporation__name', flat=True)
|
||||
objs = bl_items.filter(type=BLACKLIST_TYPE_CORPORATION, value__in=corporations)
|
||||
blacklist.extend(objs)
|
||||
|
||||
# Check Alliance blacklists
|
||||
alliances = evechars.values_list('corporation__alliance__name', flat=True)
|
||||
objs = bl_items.filter(type=BLACKLIST_TYPE_ALLIANCE, value__in=alliances)
|
||||
blacklist.extend(objs)
|
||||
|
||||
# Check API Key blacklists
|
||||
keys = user.eveaccount_set.all().values_list('api_user_id', flat=True)
|
||||
objs = bl_items.filter(type=BLACKLIST_TYPE_APIUSERID, value__in=keys)
|
||||
blacklist.extend(objs)
|
||||
|
||||
return blacklist
|
||||
284
app/hr/views.py
Normal file
284
app/hr/views.py
Normal file
@@ -0,0 +1,284 @@
|
||||
import datetime
|
||||
import simplejson
|
||||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.template import RequestContext
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
|
||||
from utils import installed
|
||||
|
||||
from eve_api.models import EVEAccount, EVEPlayerCorporation, EVEPlayerCharacter
|
||||
from hr.forms import CreateRecommendationForm, CreateApplicationForm, NoteForm
|
||||
from hr.models import Recommendation, Application, Audit
|
||||
from app_defines import *
|
||||
|
||||
### Shared Functions
|
||||
|
||||
def send_message(application, message_type, note=None):
|
||||
from django.core.mail import send_mail
|
||||
subject = render_to_string('hr/emails/%s_subject.txt' % message_type, { 'app': application })
|
||||
subject = ''.join(subject.splitlines())
|
||||
message = render_to_string('hr/emails/%s.txt' % message_type, { 'app': application, 'note': note })
|
||||
try:
|
||||
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [application.user.email])
|
||||
except:
|
||||
pass
|
||||
|
||||
if installed('reddit') and len(application.user.redditaccount_set.all()) > 0:
|
||||
from reddit.tasks import send_reddit_message
|
||||
send_reddit_message.delay(to=application.user.redditaccount_set.all()[0].username, subject=subject, message=message)
|
||||
|
||||
|
||||
def check_permissions(user, application=None):
|
||||
""" Check if the user has permissions to view or admin the application """
|
||||
|
||||
corplist = EVEPlayerCharacter.objects.filter(eveaccount__user=user,corporation__applications=True)
|
||||
if not application:
|
||||
if user.has_perm('hr.can_view_all') or user.has_perm('hr.can_view_corp') or corplist.filter(director=True).count():
|
||||
return HR_ADMIN
|
||||
else:
|
||||
if application.user == user:
|
||||
return HR_VIEWONLY
|
||||
if user.has_perm('hr.can_view_all'):
|
||||
return HR_ADMIN
|
||||
else:
|
||||
# Give admin access to directors of the corp
|
||||
if application.corporation.id in corplist.filter(director=True).values_list('corporation__id', flat=True):
|
||||
return HR_ADMIN
|
||||
|
||||
# Give access to none director HR people access
|
||||
if application.corporation.id in corplist.values_list('corporation__id', flat=True) and user.has_perm('hr.can_view_corp'):
|
||||
return HR_ADMIN
|
||||
|
||||
return HR_NONE
|
||||
|
||||
### General Views
|
||||
|
||||
@login_required
|
||||
def index(request):
|
||||
hrstaff = check_permissions(request.user)
|
||||
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
### Application Management
|
||||
|
||||
@login_required
|
||||
def view_applications(request):
|
||||
""" Shows a list of the user's applications """
|
||||
|
||||
apps = Application.objects.filter(user=request.user).order_by('id')
|
||||
return render_to_response('hr/applications/view_list.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def view_application(request, applicationid):
|
||||
""" View a individual application """
|
||||
|
||||
app = get_object_or_404(Application, id=applicationid)
|
||||
|
||||
perm = check_permissions(request.user, app)
|
||||
if perm == HR_VIEWONLY:
|
||||
audit = app.audit_set.filter(event__in=[AUDIT_EVENT_STATUSCHANGE, AUDIT_EVENT_REJECTION, AUDIT_EVENT_ACCEPTED, AUDIT_EVENT_MESSAGE])
|
||||
elif perm == HR_ADMIN:
|
||||
hrstaff = True
|
||||
audit = app.audit_set.all()
|
||||
else:
|
||||
return HttpResponseRedirect(reverse('hr.views.index'))
|
||||
|
||||
# Respond to Reddit Comment Load
|
||||
# TODO: Move to reddit app?
|
||||
if installed('reddit') and request.GET.has_key('redditxhr') and request.is_ajax():
|
||||
posts = []
|
||||
for acc in app.user.redditaccount_set.all():
|
||||
try:
|
||||
accposts = acc.recent_posts()
|
||||
except:
|
||||
accposts = []
|
||||
posts.extend(accposts)
|
||||
return HttpResponse(simplejson.dumps(accposts), mimetype='application/javascript')
|
||||
|
||||
return render_to_response('hr/applications/view.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def add_application(request):
|
||||
""" Create a new application to a corporation """
|
||||
|
||||
clsform = CreateApplicationForm(request.user)
|
||||
if request.method == 'POST':
|
||||
form = clsform(request.POST)
|
||||
if form.is_valid():
|
||||
|
||||
if form.cleaned_data['character'].corporation == form.cleaned_data['corporation']:
|
||||
messages.add_message(request, messages.WARNING, "This character is already a member of %s" % form.cleaned_data['corporation'])
|
||||
return HttpResponseRedirect(reverse('hr.views.view_applications'))
|
||||
|
||||
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
|
||||
|
||||
if len(EVEPlayerCorporation.objects.filter(applications=True)):
|
||||
return render_to_response('hr/applications/add.html', locals(), context_instance=RequestContext(request))
|
||||
else:
|
||||
return render_to_response('hr/applications/noadd.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
### Recommendation Management
|
||||
|
||||
@login_required
|
||||
def view_recommendations(request):
|
||||
""" View a list of recommendations the user has made """
|
||||
|
||||
recs = Recommendation.objects.filter(user=request.user)
|
||||
return render_to_response('hr/recommendations/view_list.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(user=request.user)
|
||||
rec.user_character = form.cleaned_data['character']
|
||||
rec.application = form.cleaned_data['application']
|
||||
rec.save()
|
||||
|
||||
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
|
||||
|
||||
return render_to_response('hr/recommendations/add.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def admin_applications(request):
|
||||
# Get the list of viewable applications by the admin
|
||||
corplist = EVEPlayerCharacter.objects.filter(eveaccount__user=request.user).values_list('corporation', flat=True)
|
||||
view_status = [APPLICATION_STATUS_AWAITINGREVIEW, APPLICATION_STATUS_ACCEPTED, APPLICATION_STATUS_QUERY, APPLICATION_STATUS_FLAGGED]
|
||||
|
||||
if request.user.has_perm('hr.can_view_all'):
|
||||
apps = Application.objects.all()
|
||||
elif request.user.has_perm('hr.can_view_corp'):
|
||||
apps = Application.objects.filter(corporation__id__in=list(corplist))
|
||||
else:
|
||||
return HttpResponseRedirect(reverse('hr.views.index'))
|
||||
|
||||
if 'q' in request.GET:
|
||||
query = request.GET['q']
|
||||
apps = apps.filter(character__name__icontains=query)
|
||||
else:
|
||||
apps = apps.filter(status__in=view_status)
|
||||
|
||||
if 'o' in request.GET:
|
||||
order = request.GET['o']
|
||||
if order in ['id', 'corporation', 'character']:
|
||||
apps = apps.order_by(order)
|
||||
|
||||
if 'l' in request.GET:
|
||||
limit = request.GET['l']
|
||||
apps = apps[:limit]
|
||||
|
||||
return render_to_response('hr/applications/admin/view_list.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def update_application(request, applicationid, status):
|
||||
""" Update a application's status """
|
||||
|
||||
app = get_object_or_404(Application, id=applicationid)
|
||||
if check_permissions(request.user, app):
|
||||
if not app.status == status:
|
||||
app.status = status
|
||||
app.save(user=request.user)
|
||||
return HttpResponseRedirect(reverse('hr.views.view_application', args=[applicationid]))
|
||||
|
||||
@login_required
|
||||
def add_note(request, applicationid):
|
||||
""" Add a note to a application """
|
||||
|
||||
if check_permissions(request.user) == HR_ADMIN:
|
||||
if request.method == 'POST':
|
||||
app = Application.objects.get(id=applicationid)
|
||||
if check_permissions(request.user, app) == HR_ADMIN:
|
||||
obj = Audit(application=app, user=request.user, event=AUDIT_EVENT_NOTE)
|
||||
form = NoteForm(request.POST, instance=obj)
|
||||
if form.is_valid():
|
||||
obj = form.save()
|
||||
return HttpResponseRedirect(reverse('hr.views.view_application', args=[applicationid]))
|
||||
|
||||
form = NoteForm()
|
||||
return render_to_response('hr/applications/add_note.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def add_message(request, applicationid):
|
||||
""" Send a message to the end user and note it on the application """
|
||||
|
||||
app = get_object_or_404(Application, id=applicationid)
|
||||
if check_permissions(request.user, app):
|
||||
if request.method == 'POST':
|
||||
obj = Audit(application=app, user=request.user, event=AUDIT_EVENT_MESSAGE)
|
||||
form = NoteForm(request.POST, instance=obj)
|
||||
if form.is_valid():
|
||||
obj = form.save()
|
||||
if not app.user == request.user:
|
||||
send_message(obj.application, 'message', note=obj.text)
|
||||
return HttpResponseRedirect(reverse('hr.views.view_application', args=[applicationid]))
|
||||
|
||||
form = NoteForm()
|
||||
return render_to_response('hr/applications/add_message.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def reject_application(request, applicationid):
|
||||
""" Reject the application and notify the user """
|
||||
|
||||
if check_permissions(request.user) == HR_ADMIN and request.user.has_perm('hr.can_accept'):
|
||||
if request.method == 'POST':
|
||||
app = Application.objects.get(id=applicationid)
|
||||
if check_permissions(request.user, app) == HR_ADMIN:
|
||||
obj = Audit(application=app, user=request.user, event=AUDIT_EVENT_REJECTION)
|
||||
form = NoteForm(request.POST, instance=obj)
|
||||
if form.is_valid():
|
||||
obj = form.save()
|
||||
obj.application.status = APPLICATION_STATUS_REJECTED
|
||||
obj.application.save(user=request.user)
|
||||
send_message(obj.application, 'rejected', note=obj.text)
|
||||
return HttpResponseRedirect(reverse('hr.views.view_application', args=[applicationid]))
|
||||
|
||||
form = NoteForm()
|
||||
return render_to_response('hr/applications/reject.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def accept_application(request, applicationid):
|
||||
""" Accept the application and notify the user """
|
||||
|
||||
if check_permissions(request.user) == HR_ADMIN and request.user.has_perm('hr.can_accept'):
|
||||
if request.method == 'POST':
|
||||
app = Application.objects.get(id=applicationid)
|
||||
if check_permissions(request.user, app) == HR_ADMIN:
|
||||
obj = Audit(application=app, user=request.user, event=AUDIT_EVENT_ACCEPTED)
|
||||
form = NoteForm(request.POST, instance=obj)
|
||||
if form.is_valid():
|
||||
obj = form.save()
|
||||
obj.application.status = APPLICATION_STATUS_ACCEPTED
|
||||
obj.application.save(user=request.user)
|
||||
send_message(obj.application, 'accepted', note=obj.text)
|
||||
return HttpResponseRedirect(reverse('hr.views.view_application', args=[applicationid]))
|
||||
|
||||
form = NoteForm()
|
||||
return render_to_response('hr/applications/accept.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
return render_to_response('hr/index.html', locals(), context_instance=RequestContext(request))
|
||||
Reference in New Issue
Block a user