Skip to content

Commit 9bb5f6c

Browse files
committed
Merge branch 'dev' of https://github.com/PROCOLLAB-github/api into dev
2 parents 793f3ef + 64e8025 commit 9bb5f6c

File tree

7 files changed

+239
-0
lines changed

7 files changed

+239
-0
lines changed

procollab/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
"partner_programs.apps.PartnerProgramsConfig",
9595
"mailing.apps.MailingConfig",
9696
"feed.apps.FeedConfig",
97+
"project_rates.apps.ProjectRatesConfig",
9798
# Rest framework
9899
"rest_framework",
99100
"rest_framework_simplejwt",

project_rates/__init__.py

Whitespace-only changes.

project_rates/apps.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ProjectRatesConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "project_rates"
7+
verbose_name = "Оценка проектов"

project_rates/constants.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
VERBOSE_TYPES = (
2+
("str", "Текст"),
3+
("int", "Целочисленное число"),
4+
("float", "Число с плавающей точкой"),
5+
("bool", "Да или нет"),
6+
)
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# Generated by Django 4.2.3 on 2024-02-10 10:49
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
("partner_programs", "0004_auto_20231230_0002"),
14+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15+
("projects", "0021_project_subscribers"),
16+
]
17+
18+
operations = [
19+
migrations.CreateModel(
20+
name="Criteria",
21+
fields=[
22+
(
23+
"id",
24+
models.BigAutoField(
25+
auto_created=True,
26+
primary_key=True,
27+
serialize=False,
28+
verbose_name="ID",
29+
),
30+
),
31+
("name", models.CharField(max_length=50, verbose_name="Название")),
32+
(
33+
"description",
34+
models.TextField(blank=True, null=True, verbose_name="Описание"),
35+
),
36+
(
37+
"type",
38+
models.CharField(
39+
choices=[
40+
("str", "Текст"),
41+
("int", "Целочисленное число"),
42+
("float", "Число с плавающей точкой"),
43+
("bool", "Да или нет"),
44+
],
45+
max_length=8,
46+
verbose_name="Тип",
47+
),
48+
),
49+
(
50+
"min_value",
51+
models.FloatField(
52+
blank=True,
53+
help_text="(если есть)",
54+
null=True,
55+
verbose_name="Минимально допустимое числовое значение",
56+
),
57+
),
58+
(
59+
"max_value",
60+
models.FloatField(
61+
blank=True,
62+
help_text="(если есть)",
63+
null=True,
64+
verbose_name="Максимально допустимое числовое значение",
65+
),
66+
),
67+
(
68+
"partner_program",
69+
models.ForeignKey(
70+
on_delete=django.db.models.deletion.CASCADE,
71+
related_name="criterias",
72+
to="partner_programs.partnerprogram",
73+
),
74+
),
75+
],
76+
options={
77+
"verbose_name": "Критерий оценки проекта",
78+
"verbose_name_plural": "Критерии оценки проектов",
79+
},
80+
),
81+
migrations.CreateModel(
82+
name="ProjectScore",
83+
fields=[
84+
(
85+
"id",
86+
models.BigAutoField(
87+
auto_created=True,
88+
primary_key=True,
89+
serialize=False,
90+
verbose_name="ID",
91+
),
92+
),
93+
(
94+
"value",
95+
models.CharField(
96+
blank=True, max_length=50, null=True, verbose_name="Значение"
97+
),
98+
),
99+
(
100+
"comment",
101+
models.CharField(
102+
blank=True, max_length=100, null=True, verbose_name="Комментарий"
103+
),
104+
),
105+
(
106+
"criteria",
107+
models.ForeignKey(
108+
on_delete=django.db.models.deletion.CASCADE,
109+
related_name="scores",
110+
to="project_rates.criteria",
111+
),
112+
),
113+
(
114+
"project",
115+
models.ForeignKey(
116+
on_delete=django.db.models.deletion.CASCADE,
117+
related_name="scores",
118+
to="projects.project",
119+
),
120+
),
121+
(
122+
"user",
123+
models.ForeignKey(
124+
on_delete=django.db.models.deletion.CASCADE,
125+
related_name="scores",
126+
to=settings.AUTH_USER_MODEL,
127+
),
128+
),
129+
],
130+
options={
131+
"verbose_name": "Оценка проекта",
132+
"verbose_name_plural": "Оценки проектов",
133+
"unique_together": {("criteria", "user", "project")},
134+
},
135+
),
136+
]

project_rates/migrations/__init__.py

Whitespace-only changes.

project_rates/models.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from django.contrib.auth import get_user_model
2+
from django.db import models
3+
4+
from partner_programs.models import PartnerProgram
5+
from projects.models import Project
6+
from project_rates.constants import VERBOSE_TYPES
7+
8+
User = get_user_model()
9+
10+
11+
class Criteria(models.Model):
12+
"""
13+
Criteria model
14+
15+
Attributes:
16+
name: A CharField name of the criteria
17+
description: A TextField description of criteria
18+
type: A CharField choice between "str", "int", "bool" and "float"
19+
min_value: Optional FloatField for numeric values
20+
max_value: Optional FloatField for numeric values
21+
partner_program: A ForeignKey connection to PartnerProgram model
22+
23+
"""
24+
25+
name = models.CharField(verbose_name="Название", max_length=50)
26+
description = models.TextField(verbose_name="Описание", null=True, blank=True)
27+
type = models.CharField(verbose_name="Тип", max_length=8, choices=VERBOSE_TYPES)
28+
29+
min_value = models.FloatField(
30+
verbose_name="Минимально допустимое числовое значение",
31+
help_text="(если есть)",
32+
null=True,
33+
blank=True,
34+
)
35+
max_value = models.FloatField(
36+
verbose_name="Максимально допустимое числовое значение",
37+
help_text="(если есть)",
38+
null=True,
39+
blank=True,
40+
)
41+
partner_program = models.ForeignKey(
42+
PartnerProgram,
43+
on_delete=models.CASCADE,
44+
related_name="criterias",
45+
)
46+
47+
def __str__(self):
48+
return f"Criteria<{self.id}> - {self.name} {self.partner_program.name}"
49+
50+
class Meta:
51+
verbose_name = "Критерий оценки проекта"
52+
verbose_name_plural = "Критерии оценки проектов"
53+
54+
55+
class ProjectScore(models.Model):
56+
"""
57+
ProjectScore model
58+
59+
Attributes:
60+
criteria: A ForeignKey connection to Criteria model
61+
user: A ForeignKey connection to User model
62+
63+
value: CharField for value
64+
65+
commentary: CharField for optional commentary
66+
67+
"""
68+
69+
criteria = models.ForeignKey(
70+
Criteria, on_delete=models.CASCADE, related_name="scores"
71+
)
72+
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="scores")
73+
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="scores")
74+
75+
value = models.CharField(
76+
verbose_name="Значение", max_length=50, null=True, blank=True
77+
)
78+
79+
comment = models.CharField(
80+
verbose_name="Комментарий", null=True, blank=True, max_length=100
81+
)
82+
83+
def __str__(self):
84+
return f"ProjectScore<{self.id}> - {self.criteria.name}"
85+
86+
class Meta:
87+
verbose_name = "Оценка проекта"
88+
verbose_name_plural = "Оценки проектов"
89+
unique_together = ("criteria", "user", "project")

0 commit comments

Comments
 (0)