Skip to content

Commit d30af78

Browse files
authored
Merge pull request #54 from moscowpython/tech/move_to_enrollment_model
move enrollment to db
2 parents 088fad3 + b7561fb commit d30af78

File tree

7 files changed

+48
-42
lines changed

7 files changed

+48
-42
lines changed

landing_page/mainpage/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from django.db import models
2+
from django.utils.timezone import now
3+
from mainpage.utils.typing import ensured
24

35

46
class Curators(models.Model):
@@ -63,3 +65,10 @@ class Enrollment(models.Model):
6365
late_price_rub = models.IntegerField()
6466
early_price_date_to = models.DateField()
6567
late_price_date_from = models.DateField()
68+
69+
@staticmethod
70+
def get_enrollment_with_active_registration() -> "Enrollment":
71+
return ensured(Enrollment.objects.filter(end_registration_date__gte=now()).first())
72+
73+
def __str__(self) -> str:
74+
return f"Enrollment ({self.start_date} - {self.end_date})"

landing_page/mainpage/templates/mainpage/include/index_hero.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ <h3 class="card-heading brackets brackets-yellow">Учитесь онлайн</h
4545
<div class="price-parent">
4646
<div class="price-date"><b>Ранняя регистрация</b></div>
4747
<div class="price-date">
48-
До {{ enrollment.early_price.date_to | date:"j E" }}
48+
До {{ enrollment.early_price_date_to | date:"j E" }}
4949
</div>
50-
<strong class="price">{{ enrollment.early_price.price_rub }} р.</strong>
50+
<strong class="price">{{ enrollment.early_price_rub }} р.</strong>
5151
</div>
5252
<div class="decr-price-parent">
5353
<a href="#howToPay" class="decr-price d-none d-lg-block scroll-to">
@@ -58,7 +58,7 @@ <h3 class="card-heading brackets brackets-yellow">Учитесь онлайн</h
5858
</a>
5959
</div>
6060
</div>
61-
{% if today <= enrollment.early_price.date_to %}
61+
{% if today <= enrollment.early_price_date_to %}
6262
<button class="yellow btn btn-warning btn-add btn-buy" data-toggle="modal" data-target="#overlay">
6363
Купить билет
6464
</button>
@@ -72,8 +72,8 @@ <h3 class="card-heading brackets brackets-yellow">Учитесь онлайн</h
7272
<div class="pt-lg-3">
7373
<div class="price-parent">
7474
<div class="price-date"><b>Обычная регистрация</b></div>
75-
<div class="price-date"> С {{ enrollment.late_price.date_from | date:"j E" }}</div>
76-
<strong class="price">{{ enrollment.late_price.price_rub }} р.</strong>
75+
<div class="price-date"> С {{ enrollment.late_price_date_from | date:"j E" }}</div>
76+
<strong class="price">{{ enrollment.late_price_rub }} р.</strong>
7777
</div>
7878
<div class="decr-price-parent">
7979
<a href="#howToPay" class="decr-price d-none d-lg-block scroll-to">
@@ -82,7 +82,7 @@ <h3 class="card-heading brackets brackets-yellow">Учитесь онлайн</h
8282
<a href="#howToPay" class="decr-price d-lg-none scroll-to" style="padding-top: 5px">Есть рассрочка</a>
8383
</div>
8484
</div>
85-
{% if today >= enrollment.late_price.date_from %}
85+
{% if today >= enrollment.late_price_date_from %}
8686
<button class="btn btn-warning btn-add btn-buy" data-toggle="modal" data-target="#overlay">
8787
Купить билет
8888
</button>

landing_page/mainpage/utils/__init__.py

Whitespace-only changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from typing import Optional, TypeVar
2+
3+
_T = TypeVar("_T")
4+
5+
6+
def ensured(value: Optional[_T]) -> _T:
7+
assert value
8+
return value

landing_page/mainpage/views.py

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,16 @@
1-
import dataclasses
2-
import datetime
31
from datetime import date
4-
from typing import Optional
52

63
from django.http import HttpRequest, HttpResponse
7-
from django.template import loader
4+
from django.shortcuts import render
85

9-
from .models import Curators, GraduateProjects
10-
11-
12-
@dataclasses.dataclass
13-
class CoursePrice:
14-
price_rub: int
15-
date_from: Optional[datetime.date] = None
16-
date_to: Optional[datetime.date] = None
17-
18-
19-
@dataclasses.dataclass
20-
class Enrollment:
21-
timepad_event_id: str
22-
start_date: datetime.date
23-
end_date: datetime.date
24-
end_registration_date: datetime.date
25-
early_price: CoursePrice
26-
late_price: CoursePrice
6+
from .models import Curators, Enrollment, GraduateProjects
277

288

299
def index(request: HttpRequest) -> HttpResponse:
30-
template = loader.get_template('mainpage/index.html')
31-
32-
enrollment = Enrollment(
33-
timepad_event_id='2441413',
34-
start_date=datetime.date(2023, 9, 2),
35-
end_date=datetime.date(2023, 11, 4),
36-
end_registration_date=datetime.date(2023, 8, 31),
37-
early_price=CoursePrice(price_rub=30000, date_to=datetime.date(2023, 6, 30)),
38-
late_price=CoursePrice(price_rub=35000, date_from=datetime.date(2023, 7, 1)),
39-
)
40-
10+
enrollment = Enrollment.get_enrollment_with_active_registration()
4111
context = {
4212
'enrollment': enrollment,
4313
'projects': GraduateProjects.objects.all(),
44-
4514
'registration_closes_date_formatted': enrollment.end_registration_date.strftime('%b %d, %Y %H:%M:%S'),
4615
'student_videos': [
4716
{
@@ -72,4 +41,4 @@ def index(request: HttpRequest) -> HttpResponse:
7241
'curators_list': Curators.objects.filter(is_visible=True),
7342
'today': date.today(),
7443
}
75-
return HttpResponse(template.render(context, request))
44+
return render(request, 'mainpage/index.html', context)

landing_page/tests/conftest.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import datetime
2+
3+
import pytest
4+
from mainpage.models import Enrollment
5+
6+
7+
@pytest.fixture
8+
def active_enrollment() -> Enrollment:
9+
now = datetime.datetime.now()
10+
return Enrollment.objects.create(
11+
timepad_event_id="123",
12+
start_date=now + datetime.timedelta(days=3),
13+
end_date=now + datetime.timedelta(days=10),
14+
end_registration_date=now + datetime.timedelta(days=1),
15+
early_price_rub=100,
16+
late_price_rub=200,
17+
early_price_date_to=now,
18+
late_price_date_from=now,
19+
)

landing_page/tests/test_index.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import pytest
22
from django.test import Client
3+
from mainpage.models import Enrollment
34

45

56
@pytest.mark.django_db
6-
def test__index__shows_up(client: Client) -> None:
7+
def test__index__shows_up(client: Client, active_enrollment: Enrollment) -> None:
78
response = client.get('/')
89
assert response.status_code == 200

0 commit comments

Comments
 (0)