Skip to content

Commit e385ff1

Browse files
authored
Merge pull request #422 from PROCOLLAB-github/feature/set_project_company_status
PRO-404: Set project company status
2 parents 52fb11a + 05a4a20 commit e385ff1

8 files changed

Lines changed: 57 additions & 10 deletions

File tree

projects/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class ProjectAdmin(admin.ModelAdmin):
1616
"id",
1717
"name",
1818
"draft",
19+
"is_company",
1920
)
2021
list_display_links = (
2122
"id",

projects/filters.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class ProjectFilter(filters.FilterSet):
1515
industry (int), step (int), region (str), name__contains (str),
1616
description__contains (str), collaborator__user__in (List[int]),
1717
datetime_created__gt (datetime.datetime), step (int), any_vacancies (bool),
18-
member_count__gt (int), member_count__lt (int), leader (int), partner_program (int)
18+
member_count__gt (int), member_count__lt (int), leader (int), partner_program (int),
19+
is_company (bool).
1920
2021
Examples:
2122
?industry=1&name__contains=clown
@@ -26,6 +27,7 @@ class ProjectFilter(filters.FilterSet):
2627
?step=1 equals to .filter(step=1)
2728
?any_vacancies=true equals to .filter(any_vacancies=True)
2829
?collaborator__count__gt=1 equals to .filter(collaborator__count__gt=1)
30+
?is_company=0/?is_company=false equals .filter(is_company=False)
2931
"""
3032

3133
@classmethod
@@ -84,6 +86,10 @@ def filter_by_partner_program(self, queryset, name, value):
8486
datetime_created__gt = filters.DateTimeFilter(
8587
field_name="datetime_created", lookup_expr="gt"
8688
)
89+
is_company = filters.BooleanFilter(
90+
field_name="is_company",
91+
label="is_company\n`1`/`true` is company\n`0`/`false` is not company"
92+
)
8793

8894
# filters by whether there are any vacancies in the project
8995
any_vacancies = filters.BooleanFilter(field_name="vacancies", method="vacancy_filter")
@@ -107,4 +113,5 @@ class Meta:
107113
"leader",
108114
"step",
109115
"partner_program",
116+
"is_company",
110117
)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.2.11 on 2024-08-23 12:11
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("projects", "0021_project_subscribers"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="project",
15+
options={
16+
"ordering": ["-is_company", "-hidden_score", "-datetime_created"],
17+
"verbose_name": "Проект",
18+
"verbose_name_plural": "Проекты",
19+
},
20+
),
21+
migrations.AddField(
22+
model_name="project",
23+
name="is_company",
24+
field=models.BooleanField(default=False),
25+
),
26+
]

projects/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class Project(models.Model):
7070
image_address: A URLField image URL address.
7171
leader: A ForeignKey referring to the User model.
7272
draft: A boolean indicating if Project is a draft.
73+
is_company: A boolean indicating if Project is a company.
7374
cover: A ForeignKey referring to the UserFile model, which is the image cover of the project.
7475
datetime_created: A DateTimeField indicating date of creation.
7576
datetime_updated: A DateTimeField indicating date of update.
@@ -98,6 +99,7 @@ class Project(models.Model):
9899
)
99100

100101
draft = models.BooleanField(blank=False, default=True)
102+
is_company = models.BooleanField(null=False, default=False)
101103

102104
cover = models.ForeignKey(
103105
UserFile,
@@ -135,7 +137,7 @@ def __str__(self):
135137
return f"Project<{self.id}> - {self.name}"
136138

137139
class Meta:
138-
ordering = ["-hidden_score", "-datetime_created"]
140+
ordering = ["-is_company", "-hidden_score", "-datetime_created"]
139141
verbose_name = "Проект"
140142
verbose_name_plural = "Проекты"
141143

projects/serializers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class Meta:
122122
"collaborators",
123123
"leader",
124124
"draft",
125+
"is_company",
125126
"vacancies",
126127
"datetime_created",
127128
"datetime_updated",
@@ -134,6 +135,7 @@ class Meta:
134135
"views_count",
135136
"datetime_created",
136137
"datetime_updated",
138+
"is_company",
137139
]
138140

139141

@@ -159,9 +161,10 @@ class Meta:
159161
"image_address",
160162
"industry",
161163
"views_count",
164+
"is_company",
162165
]
163166

164-
read_only_fields = ["leader", "views_count"]
167+
read_only_fields = ["leader", "views_count", "is_company"]
165168

166169
def is_valid(self, *, raise_exception=False):
167170
return super().is_valid(raise_exception=raise_exception)

users/serializers.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,9 @@ class Meta:
144144
"industry",
145145
"views_count",
146146
"collaborator",
147+
"is_company",
147148
]
148-
read_only_fields = ["leader", "collaborator"]
149+
read_only_fields = ["leader", "collaborator", "is_company"]
149150

150151

151152
class UserSubscribedProjectsSerializer(serializers.ModelSerializer[Project]):
@@ -170,8 +171,9 @@ class Meta:
170171
"image_address",
171172
"industry",
172173
"views_count",
174+
"is_company",
173175
]
174-
read_only_fields = ["leader", "collaborator"]
176+
read_only_fields = ["leader", "collaborator", "is_company"]
175177

176178

177179
class SubscriptionSerializer(serializers.Serializer):
@@ -475,9 +477,10 @@ class Meta:
475477
"industry",
476478
"views_count",
477479
"draft",
480+
"is_company",
478481
]
479482

480-
read_only_fields = ["leader", "views_count"]
483+
read_only_fields = ["leader", "views_count", "is_company"]
481484

482485
def is_valid(self, *, raise_exception=False):
483486
return super().is_valid(raise_exception=raise_exception)

vacancy/serializers.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class Meta:
6363
"name",
6464
"description",
6565
"image_address",
66+
"is_company",
6667
]
6768

6869

@@ -135,9 +136,10 @@ class Meta:
135136
"image_address",
136137
"industry",
137138
"views_count",
139+
"is_company",
138140
]
139141

140-
read_only_fields = ["leader", "views_count"]
142+
read_only_fields = ["leader", "views_count", "is_company"]
141143

142144
def is_valid(self, *, raise_exception=False):
143145
return super().is_valid(raise_exception=raise_exception)
@@ -152,8 +154,6 @@ class ProjectVacancyCreateListSerializer(
152154
AbstractVacancyReadOnlyFields,
153155
RequiredSkillsWriteSerializerMixin[Vacancy],
154156
):
155-
# TODO FIX This
156-
project = ProjectListSerializer_TODO_FIX()
157157

158158
def create(self, validated_data):
159159
project = validated_data["project"]
@@ -185,6 +185,11 @@ def create(self, validated_data):
185185

186186
return vacancy
187187

188+
def to_representation(self, instance):
189+
ret = super().to_representation(instance)
190+
ret["project"] = ProjectListSerializer_TODO_FIX(instance.project).data
191+
return ret
192+
188193
class Meta:
189194
model = Vacancy
190195
fields = [

vacancy/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def test_vacancy_creation(self):
6767
)
6868
self.assertEqual(response.data["description"], "Test")
6969
self.assertEqual(response.data["is_active"], not self.created_project.draft)
70-
self.assertEqual(response.data["project"], self.vacancy_create_data["project"])
70+
self.assertEqual(response.data["project"]["id"], self.vacancy_create_data["project"])
7171

7272
def user_create(self):
7373
request = self.factory.post("auth/users/", USER_CREATE_DATA)

0 commit comments

Comments
 (0)