Первоначальный залив проекта
This commit is contained in:
501
retraining/main/views.py
Normal file
501
retraining/main/views.py
Normal file
@@ -0,0 +1,501 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse
|
||||
|
||||
from django.conf import settings
|
||||
from .models import *
|
||||
|
||||
|
||||
# paсkages for generating docx files
|
||||
from django.http import FileResponse
|
||||
from .gen_doc import *
|
||||
|
||||
# from docxtpl import DocxTemplate
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
menu = [{'title': 'Главная', 'url_name': '', 'data_feather': 'home'},
|
||||
{'title': 'Студенты', 'url_name': 'students', 'data_feather': 'user'},
|
||||
{'title': 'Группы', 'url_name': 'groups', 'data_feather': 'users'},
|
||||
{'title': 'Договоры', 'url_name': 'contracts', 'data_feather': 'file-text'},
|
||||
{'title': 'Приказы', 'url_name': 'orders', 'data_feather': 'file-text'},
|
||||
{'title': 'Справки', 'url_name': 'sertificates', 'data_feather': 'file-text'},
|
||||
{'title': 'Пропуска', 'url_name': 'access', 'data_feather': 'file-text'},
|
||||
{'title': 'Темы ВКР', 'url_name': 'graduation_works', 'data_feather': 'file-text'},
|
||||
]
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
||||
|
||||
def index(request):
|
||||
groups = Groups.objects.filter(graduation_date__gte=datetime.now()).order_by('graduation_date')
|
||||
# objects = Contracts.objects.order_by('group')
|
||||
context = {
|
||||
'title': 'Главная страница',
|
||||
'objects': groups,
|
||||
'data': datetime.now(),
|
||||
'menu': menu,
|
||||
'active': 1,
|
||||
}
|
||||
return render(request, 'main/index.html', context=context)
|
||||
|
||||
|
||||
# Вьюха вывода списка студентов
|
||||
@login_required
|
||||
def students_page(request):
|
||||
students = Students.objects.order_by('surname', 'name', 'patronymic')
|
||||
context = {
|
||||
'objects': students,
|
||||
'title': ' - Студенты',
|
||||
't_title': 'Список студентов',
|
||||
'menu': menu,
|
||||
'active': 2,
|
||||
}
|
||||
return render(request, 'main/students_old.html', context=context)
|
||||
|
||||
|
||||
# Вьюха вывода отдельного студента
|
||||
@login_required
|
||||
def get_student(request, student_id):
|
||||
student = Students.objects.get(id=student_id)
|
||||
contracts = Contracts.objects.filter(client=student_id)
|
||||
orders = Orders.objects.filter(contracts__client=student_id)
|
||||
sertificates = Sertificates.objects.filter(contract__client=student_id)
|
||||
context = {
|
||||
'object': student,
|
||||
'contracts': contracts,
|
||||
'orders': orders,
|
||||
'sertificates': sertificates,
|
||||
'title': f' - {student.surname_cases.genitive} {student.name[:1]}. {student.patronymic[:1]}',
|
||||
't_title': '',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
return render(request, 'main/get_student.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_customer(request, customer_id):
|
||||
pass
|
||||
|
||||
|
||||
# ----------------- Контроллеры для групп ------------------
|
||||
# Контроллер вывода списка групп
|
||||
@login_required
|
||||
def groups_page(request):
|
||||
groups = Groups.objects.order_by('-graduation_date', '-title')
|
||||
context = {
|
||||
'objects': groups,
|
||||
'title': ' - Группы',
|
||||
't_title': 'Список групп',
|
||||
'menu': menu,
|
||||
'active': 3,
|
||||
}
|
||||
return render(request, 'main/list_groups.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_group(request, group_id):
|
||||
"""Контроллер вывода отдельной группы"""
|
||||
contracts = Contracts.objects.filter(group=group_id)
|
||||
group = Groups.objects.get(pk=group_id)
|
||||
context = {
|
||||
'group_id': group_id,
|
||||
'objects': contracts,
|
||||
'title': f' - {group.title}',
|
||||
't_title': f'Список студентов группы {group.title}',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
return render(request, 'main/list_students.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_list_sdo(request, group_id):
|
||||
"""Контроллер для вывода списка под внсение в систему SDO"""
|
||||
contracts = Contracts.objects.filter(group=group_id)
|
||||
group = Groups.objects.get(pk=group_id)
|
||||
context = {
|
||||
'group_id': group_id,
|
||||
'title': f' - список для SDO',
|
||||
'objects': contracts,
|
||||
'menu': menu,
|
||||
't_title': f'Список группы {group.title} для платформы SDO',
|
||||
'active': 0,
|
||||
}
|
||||
|
||||
return render(request, template_name='main/list_for_sdo.html', context=context)
|
||||
|
||||
|
||||
# ----------------- Контроллеры для договоров ------------------
|
||||
@login_required
|
||||
def contracts_page(request):
|
||||
"""Вывод списка договоров"""
|
||||
contracts = Contracts.objects.all()
|
||||
context = {
|
||||
'objects': contracts,
|
||||
'title': ' - Договоры',
|
||||
't_title': f'Договоры',
|
||||
'menu': menu,
|
||||
'active': 4,
|
||||
}
|
||||
return render(request, template_name='main/contracts.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_contract(request, contract_id):
|
||||
"""Вывод отдельного договора"""
|
||||
contract = Contracts.objects.get(pk=contract_id)
|
||||
context = {
|
||||
'object': contract,
|
||||
'title': f' - {contract.number}',
|
||||
't_title': f'Договоры',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
return render(request, 'main/get_contract.html', context=context)
|
||||
|
||||
|
||||
# ----------------- Контроллеры для пропусков ------------------
|
||||
@login_required
|
||||
def access_page(request):
|
||||
"""Вывод списка служебок под пропуска"""
|
||||
access_list = Access_lists.objects.all()
|
||||
context = {
|
||||
'objects': access_list,
|
||||
'title': ' - Пропуски',
|
||||
't_title': f'Пропуски',
|
||||
'menu': menu,
|
||||
'active': 7,
|
||||
}
|
||||
return render(request, 'main/access.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_acces(request, acces_id):
|
||||
"""вывод списка служебных записок под пропуска"""
|
||||
acces = Access_lists.objects.get(pk=acces_id)
|
||||
contracts = Contracts.objects.filter(access_lists__pk=acces_id).order_by('client__surname', 'client__name',
|
||||
'group__graduation_date', )
|
||||
# print(contracts)
|
||||
context = {
|
||||
'objects': contracts,
|
||||
'object': acces,
|
||||
# 'title' : f' - {contract.number}',
|
||||
't_title': f'Пропуска',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
return render(request, 'main/get_acces.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_acces(required, acces_id):
|
||||
"""генерация служебки на пропуска"""
|
||||
acces = Access_lists.objects.get(pk=acces_id)
|
||||
|
||||
filename = f'{acces.registration_date:%y%m%d} служебка на пропуска.docx'
|
||||
|
||||
return FileResponse(memo_by_order(acces_id=acces_id), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_extract(request, extract_id):
|
||||
"""Отображение выписки из протокола кафедры"""
|
||||
# extract = Extracts.objects.get(pk=extract_id)
|
||||
order = Orders.objects.get(extract__pk=extract_id)
|
||||
contracts = Orders.objects.get(pk=order.pk).contracts.all().order_by('client')
|
||||
context = {
|
||||
'object': order,
|
||||
# 'extract': extract,
|
||||
'contracts': contracts,
|
||||
'menu': menu,
|
||||
'title': f'{order.extract}',
|
||||
}
|
||||
return render(request, 'main/get_extract.html', context=context)
|
||||
|
||||
|
||||
# TODO добавить в текст выбор докладчика из базы.
|
||||
@login_required
|
||||
def gen_extract(request, extract_id):
|
||||
"""Генерация файла выписки"""
|
||||
object = Orders.objects.get(extract__pk=extract_id)
|
||||
contracts = Orders.objects.get(pk=object.pk).contracts.all().order_by('client')
|
||||
|
||||
filename = f'{object.extract.date:%y%m%d} Выписка.docx'
|
||||
|
||||
return FileResponse(extract_department_meeting(object, contracts), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
@login_required
|
||||
def print_extract(request, extract_id):
|
||||
# extract = Extracts.objects.get(pk=extract_id)
|
||||
order = Orders.objects.get(extract__pk=extract_id)
|
||||
contracts = Orders.objects.get(pk=order.pk).contracts.all().order_by('client')
|
||||
context = {
|
||||
'object': order,
|
||||
# 'extract': extract,
|
||||
'contracts': contracts,
|
||||
'title': f'{order.extract}',
|
||||
}
|
||||
return render(request, 'main/print_extract.html', context=context)
|
||||
|
||||
|
||||
# Вывод на печать договора
|
||||
@login_required
|
||||
def print_contract(request, contract_id):
|
||||
contract = Contracts.objects.get(pk=contract_id)
|
||||
context = {
|
||||
'object': contract,
|
||||
'title': f'договор № {contract.number}',
|
||||
|
||||
}
|
||||
if contract.customer:
|
||||
return render(request, 'main/print_contract_with_customer.html', context=context)
|
||||
else:
|
||||
return render(request, 'main/print_contract.html', context=context)
|
||||
|
||||
|
||||
# ----------------- Контроллеры для приказов ------------------
|
||||
@login_required
|
||||
def orders_page(request):
|
||||
"""Вывод списка приказов"""
|
||||
orders = Orders.objects.order_by('-registered')
|
||||
context = {
|
||||
'objects': orders,
|
||||
'title': ' - Приказы',
|
||||
't_title': 'Список приказов',
|
||||
'menu': menu,
|
||||
'active': 5,
|
||||
}
|
||||
return render(request, 'main/list_orders.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_order(request, order_id):
|
||||
"""Вывод списка приказов"""
|
||||
order = Orders.objects.get(pk=order_id)
|
||||
contracts = Orders.objects.get(pk=order_id).contracts.all().order_by('client')
|
||||
is_single = True if contracts.count() == 1 else False
|
||||
|
||||
context = {
|
||||
'object': order,
|
||||
'contracts': contracts,
|
||||
'menu': menu,
|
||||
'is_single': is_single,
|
||||
'title': f'{order.type_order}',
|
||||
}
|
||||
|
||||
return render(request, 'main/get_order.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def for_registry(request, order_id):
|
||||
order = Orders.objects.get(pk=order_id)
|
||||
contracts = Orders.objects.get(pk=order_id).contracts.all().order_by('client')
|
||||
|
||||
context = {
|
||||
'object': order,
|
||||
'contracts': contracts,
|
||||
'menu': menu,
|
||||
# 'is_single':is_single,
|
||||
'title': f'Реестр в отдел кадров',
|
||||
}
|
||||
|
||||
return render(request, 'main/for_registry.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_for_registry(request, order_id):
|
||||
filename = f'для реестра {datetime.now():%y%m}.xlsx'
|
||||
|
||||
return FileResponse(filefor_registry(order_id=order_id), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
@login_required
|
||||
def print_order(request, order_id):
|
||||
order = Orders.objects.get(pk=order_id)
|
||||
contracts = Orders.objects.get(pk=order_id).contracts.all().order_by('client')
|
||||
|
||||
# https://ru.stackoverflow.com/questions/842937/django-Получить-связанные-объекты
|
||||
# https://django.fun/ru/articles/tutorials/select_related-i-prefetch_related-v-django/
|
||||
is_single = True if contracts.count() == 1 else False
|
||||
context = {
|
||||
'object': order,
|
||||
'contracts': contracts,
|
||||
'is_single': is_single,
|
||||
'title': f'{order.type_order}',
|
||||
}
|
||||
if order.type_order.title == 'о зачислении':
|
||||
return render(request, 'main/print_order_on_enrollment.html', context=context)
|
||||
elif order.type_order.title == 'на темы':
|
||||
return render(request, 'main/print_order_on_theme.html', context=context)
|
||||
else:
|
||||
return render(request, 'main/index.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def sertificates_page(request):
|
||||
"""Вывод списка справок"""
|
||||
sertificates = Sertificates.objects.all()
|
||||
context = {
|
||||
'objects': sertificates,
|
||||
'title': ' - Справки',
|
||||
't_title': 'Список справок',
|
||||
'menu': menu,
|
||||
'active': 6,
|
||||
|
||||
}
|
||||
return render(request, 'main/sertificates.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_sertificates(request, sertificate_id):
|
||||
"""Вывод справки"""
|
||||
sertificate = Sertificates.objects.get(pk=sertificate_id)
|
||||
is_now = sertificate.contract.start_date < sertificate.registered < sertificate.contract.end_date
|
||||
context = {
|
||||
'is_now': is_now,
|
||||
'object': sertificate,
|
||||
'title': f' - {sertificate.contract.client}',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
|
||||
return render(request, 'main/get_sertificate.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def print_sertificate(request, sertificate_id):
|
||||
sertificate = Sertificates.objects.get(pk=sertificate_id)
|
||||
is_now = sertificate.contract.start_date < sertificate.registered < sertificate.contract.end_date
|
||||
context = {
|
||||
'is_now': is_now,
|
||||
'object': sertificate,
|
||||
'title': f' - {sertificate.contract.client}',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
|
||||
return render(request, 'main/print_sertificate.html', context=context)
|
||||
|
||||
|
||||
# Протоколы
|
||||
@login_required
|
||||
def get_protocol(request, protocol_pk):
|
||||
"""Вывод списка протоколов"""
|
||||
# protocol = Protocols.objects.prefetch_related('questions').get(pk=protocol_pk)
|
||||
protocol = Protocols.objects.prefetch_related('questions')
|
||||
context = {
|
||||
'object': protocol,
|
||||
# 'title' : f' - № {protocol.number}',
|
||||
'menu': menu,
|
||||
'active': 0,
|
||||
}
|
||||
|
||||
return render(request, 'main/get_protocol.html', context=context)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_order(request, order_id):
|
||||
"""Возвращает файл приказа по его айди"""
|
||||
order = Orders.objects.get(pk=order_id)
|
||||
contracts = Orders.objects.get(pk=order_id).contracts.all().order_by('client')
|
||||
|
||||
# https://ru.stackoverflow.com/questions/842937/django-Получить-связанные-объекты
|
||||
# https://django.fun/ru/articles/tutorials/select_related-i-prefetch_related-v-django/
|
||||
|
||||
filename = f'{order.event_date:%y%m%d} {order.type_order}.docx'
|
||||
|
||||
if order.type_order.title == 'о зачислении--==':
|
||||
return FileResponse(order_on_enrollment(order, contracts), as_attachment=True, filename=filename)
|
||||
elif order.type_order.title == 'на темы':
|
||||
return FileResponse(order_on_theme(order, contracts), as_attachment=True, filename=filename)
|
||||
else:
|
||||
return FileResponse(order_by_id(order.pk), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_list_students(request, group_id):
|
||||
contracts = Contracts.objects.filter(group=group_id).order_by('client__surname', 'client__name')
|
||||
response = HttpResponse(content_type='text/plain')
|
||||
response['Content_Disposition'] = 'attachment; filename = list_group.txt'
|
||||
lines = []
|
||||
for item in contracts:
|
||||
lines.append(f'{item.client.surname} {item.client.name[0]}. {item.client.patronymic[0]}. \n')
|
||||
|
||||
response.writelines(lines)
|
||||
return response
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_protocol(request, contract_id):
|
||||
"""генератор протокола защиты"""
|
||||
contract = Contracts.objects.get(pk=contract_id)
|
||||
|
||||
filename = f'{contract.degree_work.protocol.date_time:%y%m%d} {contract.degree_work.protocol.number}.docx'
|
||||
|
||||
return FileResponse(protocol_by_id(contract_id=contract_id), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_protocols(request, order_id):
|
||||
""" генератор протоколов защит по приказу"""
|
||||
order = Orders.objects.get(pk=order_id)
|
||||
|
||||
filename = f'{order.event_date:%y%m%d} протоколы защит.docx'
|
||||
|
||||
return FileResponse(protocol_by_order(order_id=order_id), as_attachment=True, filename=filename)
|
||||
|
||||
|
||||
# TODO: Подправить вывод ибо выдает в непонятных символах
|
||||
@login_required
|
||||
def gen_group_list(request, group_id):
|
||||
""" генератор списка студентов группы для запроса данных о оплате у Свечкарёвой """
|
||||
contracts = Contracts.objects.filter(group=group_id).order_by('client__surname', 'client__name')
|
||||
response = HttpResponse(content_type='text/plain')
|
||||
response['Content_Disposition'] = 'attachment; filename = list_group.txt'
|
||||
lines = []
|
||||
for item in contracts:
|
||||
lines.append(f'{item.number} - {item.client.surname} {item.client.name} {item.client.patronymic} \n')
|
||||
|
||||
response.writelines(lines)
|
||||
return response
|
||||
|
||||
@login_required
|
||||
def gen_diplma_form(request, contract_id):
|
||||
""" генерация бланка диплома для печати """
|
||||
contract = Contracts.objects.get(pk=contract_id)
|
||||
form = True
|
||||
# return HttpResponse(gen_diploma_supplement(contract_id))
|
||||
return FileResponse(gen_diploma(contract, form), as_attachment=True, filename=f'{contract.client.surname} - диплом.docx')
|
||||
|
||||
|
||||
@login_required
|
||||
def gen_diploma_supplement(request, contract_id):
|
||||
""" Генерация приложения диплома для печати """
|
||||
contract = Contracts.objects.get(pk=contract_id)
|
||||
form = False
|
||||
return FileResponse(gen_diploma(contract, form), as_attachment=True, filename=f'{contract.client.surname} - приложение.docx')
|
||||
|
||||
@login_required
|
||||
def graduation_works(request):
|
||||
""" Вывод списка тем """
|
||||
# works = Degree_works.objects.exclude(title='')
|
||||
contracts = Contracts.objects.exclude(degree_work=None)
|
||||
# contracts = Contracts.objects.all()
|
||||
works = Degree_works.objects.all()
|
||||
# print(works)
|
||||
context = {
|
||||
'objects': contracts,
|
||||
'title': f' - ВКР',
|
||||
't_title': 'Список тем ВКР',
|
||||
'menu': menu,
|
||||
'active': 8,
|
||||
}
|
||||
|
||||
return render(request, template_name='main/list_graduation_works.html', context=context)
|
||||
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user