Skip to content

Commit 8813dd1

Browse files
authored
Merge pull request #493 from PROCOLLAB-github/feature/new_vacancy_fields
Added new vacancy fields
2 parents edcec65 + b9d348b commit 8813dd1

4 files changed

Lines changed: 135 additions & 6 deletions

File tree

vacancy/constants.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from enum import Enum
2+
3+
4+
class ChoicesMixin:
5+
6+
@classmethod
7+
def choices(cls):
8+
"""Return a list of tuples (value, display_name) for choices."""
9+
return [(item.value, item.value) for item in cls]
10+
11+
12+
class WorkExperience(ChoicesMixin, Enum):
13+
14+
NO_EXPERIENCE: str = "Без опыта"
15+
UP_TO_A_YEAR: str = "До 1 года"
16+
FROM_ONE_TO_THREE_YEARS: str = "От 1 года до 3 лет"
17+
FROM_THREE_YEARS: str = "От 3 лет и более"
18+
19+
20+
class WorkSchedule(ChoicesMixin, Enum):
21+
22+
FULL_TIME: str = "Полный рабочий день"
23+
SHIFT_WORK: str = "Сменный график"
24+
FLEXIBLE_SCHEDULE: str = "Гибкий график"
25+
PART_TIME: str = "Частичная занятость"
26+
INTERNSHIP: str = "Стажировка"
27+
28+
29+
class WorkFormat(ChoicesMixin, Enum):
30+
31+
REMOTE: str = "Удаленная работа"
32+
OFFICE: str = "Работа в офисе"
33+
HYBRID: str = "Смешанная"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Generated by Django 4.2.11 on 2024-12-02 17:37
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vacancy", "0006_vacancy_datetime_closed"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="vacancy",
15+
name="required_experience",
16+
field=models.CharField(
17+
blank=True,
18+
choices=[
19+
("Без опыта", "Без опыта"),
20+
("До 1 года", "До 1 года"),
21+
("От 1 года до 3 лет", "От 1 года до 3 лет"),
22+
("От 3 лет и более", "От 3 лет и более"),
23+
],
24+
max_length=50,
25+
null=True,
26+
verbose_name="Требуемый опыт",
27+
),
28+
),
29+
migrations.AddField(
30+
model_name="vacancy",
31+
name="work_format",
32+
field=models.CharField(
33+
blank=True,
34+
choices=[
35+
("Удаленная работа", "Удаленная работа"),
36+
("Работа в офисе", "Работа в офисе"),
37+
("Смешанная", "Смешанная"),
38+
],
39+
max_length=50,
40+
null=True,
41+
verbose_name="Формат работы",
42+
),
43+
),
44+
migrations.AddField(
45+
model_name="vacancy",
46+
name="work_schedule",
47+
field=models.CharField(
48+
blank=True,
49+
choices=[
50+
("Полный рабочий день", "Полный рабочий день"),
51+
("Сменный график", "Сменный график"),
52+
("Гибкий график", "Гибкий график"),
53+
("Частичная занятость", "Частичная занятость"),
54+
("Стажировка", "Стажировка"),
55+
],
56+
max_length=50,
57+
null=True,
58+
verbose_name="График работы",
59+
),
60+
),
61+
]

vacancy/models.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from files.models import UserFile
66
from projects.models import Project
7+
from vacancy.constants import WorkExperience, WorkSchedule, WorkFormat
78
from vacancy.managers import VacancyManager, VacancyResponseManager
89
from django_stubs_ext.db.models import TypedModelMeta
910

@@ -16,6 +17,9 @@ class Vacancy(models.Model):
1617
role: A CharField title of the vacancy.
1718
required_skills: A GenericRelation of required skills for the vacancy.
1819
description: A TextField description of the vacancy.
20+
required_experience: CharField (choice).
21+
work_schedule: CharField (choice).
22+
work_format: CharField (choice).
1923
project: A ForeignKey referring to the Company model.
2024
is_active: A boolean indicating if Vacancy is active.
2125
datetime_created: A DateTimeField indicating date of creation.
@@ -28,24 +32,49 @@ class Vacancy(models.Model):
2832
related_query_name="vacancies",
2933
)
3034
description = models.TextField(blank=True)
35+
required_experience = models.CharField(
36+
max_length=50,
37+
choices=WorkExperience.choices(),
38+
blank=True,
39+
null=True,
40+
verbose_name="Требуемый опыт",
41+
)
42+
work_schedule = models.CharField(
43+
max_length=50,
44+
choices=WorkSchedule.choices(),
45+
blank=True,
46+
null=True,
47+
verbose_name="График работы",
48+
)
49+
work_format = models.CharField(
50+
max_length=50,
51+
choices=WorkFormat.choices(),
52+
blank=True,
53+
null=True,
54+
verbose_name="Формат работы",
55+
)
3156
project = models.ForeignKey(
3257
Project,
3358
on_delete=models.CASCADE,
3459
null=False,
3560
related_name="vacancies",
3661
)
37-
38-
is_active = models.BooleanField(blank=False, default=True)
39-
4062
datetime_created = models.DateTimeField(
41-
verbose_name="Дата создания", null=False, auto_now_add=True
63+
null=False,
64+
auto_now_add=True,
65+
verbose_name="Дата создания",
4266
)
4367
datetime_updated = models.DateTimeField(
44-
verbose_name="Дата обновления", null=False, auto_now=True
68+
null=False,
69+
auto_now=True,
70+
verbose_name="Дата обновления",
4571
)
4672
datetime_closed = models.DateTimeField(
47-
verbose_name="Дата закрытия", null=True, blank=True
73+
null=True,
74+
blank=True,
75+
verbose_name="Дата закрытия",
4876
)
77+
is_active = models.BooleanField(blank=False, default=True)
4978

5079
objects = VacancyManager()
5180

vacancy/serializers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ class Meta:
8888
"datetime_updated",
8989
"datetime_closed",
9090
"response_count",
91+
"required_experience",
92+
"work_schedule",
93+
"work_format",
9194
]
9295
read_only_fields = ["project"]
9396

@@ -202,6 +205,9 @@ class Meta:
202205
"is_active",
203206
"datetime_closed",
204207
"response_count",
208+
"required_experience",
209+
"work_schedule",
210+
"work_format",
205211
]
206212

207213

0 commit comments

Comments
 (0)