diff --git a/core/migrations/0005_auto_20170328_1904.py b/core/migrations/0005_auto_20170328_1904.py new file mode 100644 index 0000000000000000000000000000000000000000..bde81294681c4e88df8ed0943159cf00f5a3aded --- /dev/null +++ b/core/migrations/0005_auto_20170328_1904.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 12:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_auto_20170328_1417'), + ] + + operations = [ + migrations.CreateModel( + name='Application', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cover_letter', models.TextField(blank=True, null=True)), + ('allow_transcript', models.BooleanField(default=True)), + ], + ), + migrations.RemoveField( + model_name='student', + name='applied_vacancies', + ), + migrations.AddField( + model_name='student', + name='applied_vacancies', + field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'), + ), + migrations.AddField( + model_name='application', + name='student', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'), + ), + migrations.AddField( + model_name='application', + name='vacancy', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'), + ), + ] diff --git a/core/migrations/0006_auto_20170328_1950.py b/core/migrations/0006_auto_20170328_1950.py new file mode 100644 index 0000000000000000000000000000000000000000..85ba09d0c51c338e7d151cce47438c4991795dd2 --- /dev/null +++ b/core/migrations/0006_auto_20170328_1950.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 12:50 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_auto_20170328_1904'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='application', + unique_together=set([('student', 'vacancy')]), + ), + ] diff --git a/core/models/__init__.py b/core/models/__init__.py index a9638e4ef7c2a7639d525d26be476251dd6cf13f..8ca55685987932b8038fd9f98e96ab508ba6eccf 100755 --- a/core/models/__init__.py +++ b/core/models/__init__.py @@ -3,6 +3,8 @@ from core.models.accounts import Company from core.models.accounts import Student from core.models.accounts import Supervisor from core.models.vacancies import Vacancy +from core.models.vacancies import Application + diff --git a/core/models/accounts.py b/core/models/accounts.py index e94c7f0404cb60e31ec3e66eb026860da306ec82..296851594da3f3abaad2c1f59f9201e9e9de2c47 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -49,7 +49,8 @@ class Student(models.Model): resume = models.FileField(upload_to=get_student_resume_file_path, null=True, blank=True) phone_number = models.CharField(max_length=100, blank=True, db_index=True, null=True) bookmarked_vacancies = models.ManyToManyField('core.Vacancy', related_name="bookmarked_vacancies", blank=True) - applied_vacancies = models.ManyToManyField('core.Vacancy', related_name="applied_vacancies", blank=True) + applied_vacancies = models.ManyToManyField('core.Vacancy', related_name="applied_vacancies", + blank=True, through='core.Application') @property def name(self): diff --git a/core/models/vacancies.py b/core/models/vacancies.py index ef7f752532bfcf379dee73a8d217403ba3c61d88..f165a2b562545ef8feddf717ffda2f1db3063f7f 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -1,6 +1,6 @@ from django.db import models -from core.models.accounts import Company +from core.models.accounts import Company, Student class Vacancy(models.Model): @@ -12,3 +12,14 @@ class Vacancy(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + + +class Application(models.Model): + cover_letter = models.TextField(null=True, blank=True) + allow_transcript = models.BooleanField(null=False, default=True) + student = models.ForeignKey(Student, on_delete=models.CASCADE) + vacancy = models.ForeignKey(Vacancy, on_delete=models.CASCADE) + + class Meta: + unique_together = (("student", "vacancy"),) + diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index c8a443405fa6cb57ae48a2392abea5a597668528..eb1fde4354fddf5162f5eb97b56b9cd530856143 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from core.serializers.accounts import CompanySerializer +from core.serializers.accounts import CompanySerializer, StudentSerializer from core.models.vacancies import Vacancy @@ -11,3 +11,14 @@ class VacancySerializer(serializers.ModelSerializer): fields = '__all__' +class ApplicationSerializer(serializers.ModelSerializer): + vacancy = VacancySerializer() + student = StudentSerializer() + + class Meta: + model = Vacancy + fields = '__all__' + + + + diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 576fa85b492ae385a5e7f9578cd5d7686cee1397..2adf5b9cde73f72481b27d39906bd156bb12151d 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -5,8 +5,8 @@ from rest_framework.response import Response from core.lib.permissions import IsAdminOrStudent, IsAdminOrCompany from core.models import Student -from core.models.vacancies import Vacancy -from core.serializers.vacancies import VacancySerializer +from core.models.vacancies import Vacancy, Application +from core.serializers.vacancies import VacancySerializer, ApplicationSerializer class VacancyViewSet(viewsets.ModelViewSet): @@ -30,16 +30,18 @@ class ApplicationViewSet(viewsets.GenericViewSet): return Response(vacancies.data) def create(self, request, student_id): - vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['vacancy_id']) + cover_letter = request.data.get('cover_letter') + vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data.get('vacancy_id')) student = get_object_or_404(Student.objects.all(), pk=student_id) - student.applied_vacancies.add(vacancy) - return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data) + application = Application(vacancy=vacancy, student=student, cover_letter=cover_letter) + application.save() + return Response(ApplicationSerializer(application, context={'request': request}).data) def destroy(self, request, student_id, pk): vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) student = get_object_or_404(Student.objects.all(), pk=student_id) - student.applied_vacancies.remove(vacancy) - return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data) + application = get_object_or_404(Application.objects.all(), student=student, vacancy=vacancy) + return Response(ApplicationSerializer(application, context={'request': request}).data) class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet):