From 8c8b95e8392f5bf26245d56ed61b05dcb14700eb Mon Sep 17 00:00:00 2001 From: andrei Date: Sun, 21 Apr 2024 21:01:22 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CineSync/templates/includes/header.html | 6 +++ CineSync/templates/tickets/my_orders.html | 9 ++++ CineSync/tickets/urls.py | 3 +- CineSync/tickets/views.py | 16 ++++++ CineSync/timetable/models.py | 7 ++- Документы/Заполнение Кинотеатр.sql | 59 +++++++++++++---------- 6 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 CineSync/templates/tickets/my_orders.html diff --git a/CineSync/templates/includes/header.html b/CineSync/templates/includes/header.html index bead911..191f516 100644 --- a/CineSync/templates/includes/header.html +++ b/CineSync/templates/includes/header.html @@ -17,6 +17,12 @@ Расписание + {% if user.is_authenticated %} + + {% endif %} {% endwith %} diff --git a/CineSync/templates/tickets/my_orders.html b/CineSync/templates/tickets/my_orders.html new file mode 100644 index 0000000..b53e9f1 --- /dev/null +++ b/CineSync/templates/tickets/my_orders.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} +{% load static %} +{% load tags %} +{% block title %} +Мои заказы +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/CineSync/tickets/urls.py b/CineSync/tickets/urls.py index 28ea775..b9a851a 100644 --- a/CineSync/tickets/urls.py +++ b/CineSync/tickets/urls.py @@ -1,10 +1,11 @@ from django.urls import path -from tickets.views import ticket_view, order_success +from tickets.views import ticket_view, order_success, my_orders app_name = 'tickets' urlpatterns = [ path('', ticket_view, name='tickets'), path('order/success', order_success, name='order_success'), + path('my/', my_orders, name='my_orders') ] diff --git a/CineSync/tickets/views.py b/CineSync/tickets/views.py index 0312c1e..e223fa6 100644 --- a/CineSync/tickets/views.py +++ b/CineSync/tickets/views.py @@ -1,5 +1,8 @@ +from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404 +from tickets.models import Order, Ticket + def ticket_view(request): return render(request, 'tickets/ticket_buy.html') @@ -7,3 +10,16 @@ def ticket_view(request): def order_success(request): return render(request, 'tickets/order_success.html') + + +@login_required +def my_orders(request): + user = request.user + orders = get_object_or_404( + Order.objects.filter( + profile__id=user.profile.id, + ).prefetch_related( + 'tickets', + ) + ) + return render(request, 'tickets/my_orders.html') diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index 07491ad..39116b4 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -26,7 +26,12 @@ class FilmSessionsManager(Manager): def all_timetable(self): current_datetime = timezone.now() - films_sessions = super().get_queryset().filter( + films_sessions = super().get_queryset().select_related( + 'film', + ).prefetch_related( + 'film__genres', + 'film__countries', + ).filter( start_datetime__gte=current_datetime, ).prefetch_related( FilmSession.film.field.name, diff --git a/Документы/Заполнение Кинотеатр.sql b/Документы/Заполнение Кинотеатр.sql index 6f5f6b9..98a8103 100644 --- a/Документы/Заполнение Кинотеатр.sql +++ b/Документы/Заполнение Кинотеатр.sql @@ -260,42 +260,28 @@ FROM --- Определим временной промежуток в рамках рабочего времени кинотеатра (8:00 - 22:00) +-- Определим временной промежуток в рамках рабочего дня кинотеатра (10:00 - 22:00) WITH RECURSIVE session_times AS ( - SELECT strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+8 hours') AS start_time + SELECT strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+10 hours') AS start_datetime UNION ALL - SELECT strftime('%Y-%m-%d %H:%M', start_time, '+2 hours') FROM session_times - WHERE start_time < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours') + SELECT strftime('%Y-%m-%d %H:%M', start_datetime, '+2 hours') FROM session_times + WHERE start_datetime < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours') ) - ---INSERT INTO timetable_film_sessions (start_datetime, price, auditorium_id, film_id) +-- Вставим сеансы для каждого фильма в каждый зал +INSERT INTO timetable_film_sessions (start_datetime, price, auditorium_id, film_id) SELECT - CASE - WHEN MAX(end_datetime) IS NULL THEN start_datetime - ELSE MAX(end_datetime) - END AS start_time, - 500.00 AS price, + start_datetime, + 10.00 AS price, -- Укажите цену билета здесь auditoriums.id AS auditorium_id, films.id AS film_id FROM - session_times -CROSS JOIN - films_films AS films -CROSS JOIN + session_times, + films_films AS films, timetable_auditoriums AS auditoriums -LEFT JOIN - timetable_film_sessions AS prev_sessions -ON - auditoriums.id = prev_sessions.auditorium_id -AND - prev_sessions.start_datetime <= start_datetime -AND - prev_sessions.start_datetime + (films.duration || ' MINUTES') >= start_datetime -GROUP BY - start_time, auditoriums.id, films.id ORDER BY - start_time, film_id; + start_datetime, film_id; + @@ -345,4 +331,25 @@ INSERT INTO films_countries (name) VALUES ('Испания'); +-- Добавление режиссеров к фильмам +INSERT INTO films_films_directors (film_id, director_id) +SELECT f.id AS film_id, d.id AS director_id +FROM films_films AS f +JOIN films_directors AS d ON d.id <= f.id +WHERE f.id BETWEEN 1 AND 40; + +-- Добавление актеров к фильмам +INSERT INTO films_films_actors (film_id, actor_id) +SELECT f.id AS film_id, a.id AS actor_id +FROM films_films AS f +JOIN films_actors AS a ON a.id <= f.id +WHERE f.id BETWEEN 1 AND 40; + +-- Добавление стран к фильмам +INSERT INTO films_films_countries (film_id, country_id) +SELECT f.id AS film_id, c.id AS country_id +FROM films_films AS f +JOIN films_countries AS c ON c.id <= f.id +WHERE f.id BETWEEN 1 AND 40; +