Skip to content

Commit 860eed8

Browse files
committed
Merge pull request #144 from giuse88/giuseppe-fixes
Giuseppe bug fixes
2 parents e5ac79f + 92b2328 commit 860eed8

File tree

38 files changed

+259
-74
lines changed

38 files changed

+259
-74
lines changed

seeVcam/answers/admin.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
from django.contrib import admin
2+
from .models import Answer
3+
4+
5+
class AnswerAdmin(admin.ModelAdmin):
6+
fields = ('question', 'content', 'rating', 'interview')
7+
list_display = ('id',) + fields
8+
9+
admin.site.register(Answer, AnswerAdmin)
210

3-
# Register your models here.

seeVcam/answers/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from django.core.exceptions import ValidationError
2+
from django.db import models
3+
24
from common.mixins.model import UpdateCreateTimeStamp
35
from interviews.models import Interview
46
from questions.models import Question
5-
from django.db import models
67

78

89
def validate_rating(value):
@@ -16,6 +17,10 @@ class Answer(UpdateCreateTimeStamp):
1617
question = models.ForeignKey(Question, null=False, blank=False, db_column='question_id')
1718
interview = models.ForeignKey(Interview, null=False, blank=False, db_column='interview_id')
1819

20+
def __str__(self):
21+
return "Question:{0} Content:{1} Rating:{2} Interview:{3}"\
22+
.format(self.question, self.content, self.rating, self.interview)
23+
1924
class Meta:
2025
verbose_name = 'answer'
2126
verbose_name_plural = 'answers'

seeVcam/authentication/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ class SeevcamUser(AbstractBaseUser, PermissionsMixin):
9393
USERNAME_FIELD = 'email'
9494
REQUIRED_FIELDS = ['first_name', 'last_name']
9595

96+
def __str__(self):
97+
return self.get_full_name()
98+
9699
class Meta:
97100
db_table = "users"
98101
verbose_name = _('user')

seeVcam/company_profile/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33

44
class Company(models.Model):
5-
65
name = models.CharField(max_length=255, null=False, blank=False, db_index=True)
76

7+
def __str__(self):
8+
return "{0}".format(self.name)
9+
810
class Meta:
911
verbose_name = 'company'
1012
verbose_name_plural = 'companies'

seeVcam/dashboard/templates/dashboard.html

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,22 @@
5050

5151
<div id="content-wrap">
5252
<div id="container" class="container">
53-
<div class="row logo-loader">
54-
<div class="col-md-6 col-md-offset-3">
55-
<img alt="seeVcam" src="/static/images/logo-black.png">
56-
</div>
57-
<span>
58-
<div class="spinner">
59-
<div class="rect1"></div>
60-
<div class="rect2"></div>
61-
<div class="rect3"></div>
62-
<div class="rect4"></div>
63-
<div class="rect5"></div>
64-
</div>
65-
</span>
66-
</div>
53+
{% block content %}
54+
<div class="row logo-loader">
55+
<div class="col-md-6 col-md-offset-3">
56+
<img alt="seeVcam" src="/static/images/logo-black.png">
57+
</div>
58+
<span>
59+
<div class="spinner">
60+
<div class="rect1"></div>
61+
<div class="rect2"></div>
62+
<div class="rect3"></div>
63+
<div class="rect4"></div>
64+
<div class="rect5"></div>
65+
</div>
66+
</span>
67+
</div>
68+
{% endblock content %}
6769
</div>
6870
</div>
6971

seeVcam/interview_room/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def get_context_data(self, **kwargs):
4949
role=Roles.publisher)
5050
return context
5151

52+
5253
# ======================= END TO BE DELETED ========================
5354

5455

@@ -83,7 +84,7 @@ def is_interview_open(self):
8384
real_open_time = interview.start - datetime.timedelta(minutes=settings.INTERVIEW_OPEN)
8485
real_close_time = interview.end + datetime.timedelta(minutes=settings.INTERVIEW_CLOSE)
8586
opened = now_timezone() >= real_open_time
86-
closed = now_timezone() <= real_close_time and interview.status is not Interview.CLOSED
87+
closed = now_timezone() <= real_close_time and (interview.status != Interview.CLOSED)
8788
return opened and closed
8889

8990
def generate_opentok_token(self, session_id):
@@ -99,6 +100,5 @@ def get_role(self):
99100

100101

101102
class InterviewerView(LoginRequired, IsOwnerOr404, InterviewRoomView):
102-
103103
def get_role(self):
104104
return "interviewer"

seeVcam/interviews/admin.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
from django.contrib import admin
22
from interviews.models import Interview, Candidate, JobPosition
33

4-
admin.site.register(Interview)
5-
admin.site.register(Candidate)
6-
admin.site.register(JobPosition)
4+
5+
class CandidateAdmin(admin.ModelAdmin):
6+
fields = ('name', 'surname', 'email', 'cv')
7+
list_display = ('id',) + fields
8+
9+
10+
class JobPositionAdmin(admin.ModelAdmin):
11+
fields = ('position', 'job_description')
12+
list_display = ('id',) + fields
13+
14+
15+
class InterviewAdmin(admin.ModelAdmin):
16+
fields = ('status', 'start', 'end', 'catalogue', 'owner', 'job_position', 'candidate',
17+
'session_id', 'token', 'overall_score')
18+
list_display = ('id',) + fields
19+
20+
admin.site.register(Interview, InterviewAdmin)
21+
admin.site.register(Candidate, CandidateAdmin)
22+
admin.site.register(JobPosition, JobPositionAdmin)
723

824

seeVcam/interviews/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ class Candidate(UpdateCreateTimeStamp, CompanyInfo):
1212
email = models.EmailField(db_index=True, null=False, blank=False)
1313
cv = models.OneToOneField(UploadedFile, primary_key=False, null=False, blank=False, unique=True)
1414

15+
def __str__(self):
16+
return "{0} {1} {2}".format(self.name, self.surname, self.email)
17+
1518
class Meta:
1619
verbose_name = 'candidate'
1720
verbose_name_plural = 'candidates'
@@ -23,6 +26,9 @@ class JobPosition(UpdateCreateTimeStamp, CompanyInfo):
2326
position = models.CharField(max_length=255, null=False, blank=False)
2427
job_description = models.OneToOneField(UploadedFile, null=False, blank=False)
2528

29+
def __str__(self):
30+
return "{0}".format(self.position)
31+
2632
class Meta:
2733
verbose_name = 'job_position'
2834
verbose_name_plural = 'job_positions'
@@ -50,7 +56,7 @@ class Interview(UpdateCreateTimeStamp):
5056
candidate = models.ForeignKey(Candidate, null=False, blank=False)
5157
session_id = models.CharField(max_length=255, null=False, blank=False, default='UNKNOWN')
5258
token = models.CharField(max_length=255, null=False, blank=False, default='UNKNOWN')
53-
overall_score = models.FloatField(null=True)
59+
overall_score = models.FloatField(null=True, blank=True)
5460

5561
@property
5662
def job_position_name(self):

seeVcam/interviews/rest_views.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
import string, random
1+
import string
2+
import random
3+
24
from django.core.mail import send_mail
35
from rest_framework import generics
46
from opentok import OpenTok
7+
from django.conf import settings
8+
from django.db.models import Q
59

10+
from common.helpers.timezone import now_timezone
611
from common.helpers.views_helper import set_company_info
712
from interviews.models import Interview, JobPosition
813
from interviews.serializers import InterviewSerializer, JobPositionSerializer
914
from notes.models import Notes
10-
from django.conf import settings
1115
from overall_ratings.models import OverallRatingQuestion, OverallRating
1216
from questions.models import Question
1317
from questions.serializers import QuestionSerializer
@@ -31,18 +35,21 @@ def post_save(self, obj, created=False):
3135
self.send_email_to_user(obj)
3236

3337
def get_queryset(self):
34-
return Interview.objects.filter(owner=self.request.user.id).order_by('start')
38+
owner = Q(owner=self.request.user.id)
39+
interviews = Q(end__gt=now_timezone(), status=Interview.OPEN)
40+
reports = Q(status=Interview.CLOSED)
41+
return Interview.objects.filter(owner, interviews | reports).order_by('start')
3542

36-
#TODO this should be in the model done with signals
37-
#private
43+
# TODO this should be in the model done with signals
44+
# private
3845
@staticmethod
3946
def create_interview_session():
4047
# this should be a singleton
4148
opentok = OpenTok(settings.OPENTOK_API_KEY, settings.OPENTOK_SECRET)
4249
session = opentok.create_session()
4350
return session.session_id
4451

45-
#private
52+
# private
4653
@staticmethod
4754
def create_authentication_token():
4855
return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(80))

seeVcam/static/apps/dashboard/boot.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ require.config({
4545
"moment" : "bower_components/moment/moment",
4646
"notification" : "lib/components/notification/notification",
4747
"utils" : "lib/misc/utils",
48+
"redactor" : "bower_components/redactor/redactor/redactor",
4849
"nanobar" : "lib/misc/nanobar",
4950
"backbone-modal" : "lib/misc/backbone-modal"
5051
},
@@ -87,7 +88,9 @@ require.config({
8788
"bootstrap": {
8889
deps: ["jquery"]
8990
},
90-
91+
"redactor" : {
92+
deps: ["jquery"]
93+
},
9194
"underscore": {
9295
deps: [],
9396
exports: "_"

0 commit comments

Comments
 (0)