Skip to content

Commit e4bffbf

Browse files
authored
Merge pull request #326 from PROCOLLAB-github/feed_vacancies_hotfix
added signals for not displaying vacancies of draft project
2 parents ba21736 + e6bee14 commit e4bffbf

3 files changed

Lines changed: 40 additions & 9 deletions

File tree

projects/signals.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
from django.dispatch import receiver
33

44
from chats.models import ProjectChat
5+
from feed.services import delete_news_for_model, create_news_for_model
56
from projects.models import Collaborator, Project
7+
from vacancy.models import Vacancy
68

79

810
@receiver(post_save, sender=Project)
@@ -18,3 +20,21 @@ def create_project(sender, instance, created, **kwargs):
1820
Collaborator.objects.create(
1921
user=instance.leader, project=instance, role="Основатель"
2022
)
23+
24+
25+
@receiver(post_save, sender=Project)
26+
def update_vacancy(sender, instance, created, **kwargs):
27+
vacancies = Vacancy.objects.filter(project=instance)
28+
old_values = vacancies.values_list("is_active", flat=True)
29+
vacancies.update(is_active=False if instance.draft else True)
30+
new_values = vacancies.values_list("is_active", flat=True)
31+
32+
vacancies_list = list(vacancies)
33+
34+
for i in range(len(new_values)):
35+
old = old_values[i]
36+
new = new_values[i]
37+
if old != new and new is False:
38+
delete_news_for_model(vacancies_list[i])
39+
elif old != new and new is True:
40+
create_news_for_model(vacancies_list[i])

vacancy/serializers.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from django.contrib.auth import get_user_model
22
from rest_framework import serializers
33

4-
from core.fields import CustomListField
54
from projects.models import Project
65
from users.serializers import UserDetailSerializer, CustomListField
76
from vacancy.models import Vacancy, VacancyResponse
@@ -86,6 +85,16 @@ class Meta:
8685
"is_active",
8786
]
8887

88+
def create(self, validated_data):
89+
if validated_data["project"].draft:
90+
validated_data["is_active"] = False
91+
else:
92+
validated_data["is_active"] = True
93+
94+
instance = super().create(validated_data)
95+
96+
return instance
97+
8998

9099
class VacancyResponseListSerializer(serializers.ModelSerializer):
91100
is_approved = serializers.BooleanField(read_only=True)

vacancy/tests.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,20 @@ def setUp(self):
2121
self.vacancy_list_view = VacancyList.as_view()
2222
self.vacancy_detail_view = VacancyDetail.as_view()
2323
self.user_project_owner = self.user_create()
24+
25+
self.created_project = Project.objects.create(
26+
name="Test",
27+
description="Test",
28+
industry=Industry.objects.create(name="Test"),
29+
step=1,
30+
leader=self.user_project_owner,
31+
)
2432
self.vacancy_create_data = {
2533
"role": "Test",
2634
"required_skills": ["Test"],
2735
"description": "Test",
2836
"is_active": True,
29-
"project": Project.objects.create(
30-
name="Test",
31-
description="Test",
32-
industry=Industry.objects.create(name="Test"),
33-
step=1,
34-
leader=self.user_project_owner,
35-
).id,
37+
"project": self.created_project.id,
3638
}
3739

3840
def test_vacancy_creation(self):
@@ -44,7 +46,7 @@ def test_vacancy_creation(self):
4446
self.assertEqual(response.data["role"], "Test")
4547
self.assertEqual(response.data["required_skills"], ["Test"])
4648
self.assertEqual(response.data["description"], "Test")
47-
self.assertEqual(response.data["is_active"], True)
49+
self.assertEqual(response.data["is_active"], not self.created_project.draft)
4850
self.assertEqual(response.data["project"], self.vacancy_create_data["project"])
4951

5052
def user_create(self):

0 commit comments

Comments
 (0)