ADD: Отчёты
This commit is contained in:
parent
e419e46700
commit
149093c715
@ -84,4 +84,12 @@ body {
|
|||||||
.modal > .modal-dialog > .modal-content .modal-footer {
|
.modal > .modal-dialog > .modal-content .modal-footer {
|
||||||
/* фон заголовка и подвала модального окна */
|
/* фон заголовка и подвала модального окна */
|
||||||
background: whitesmoke;
|
background: whitesmoke;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ urlpatterns = [
|
|||||||
re_path(r'^add-clone$', views.add_clone),
|
re_path(r'^add-clone$', views.add_clone),
|
||||||
re_path(r'^save-clone$', views.save_clone),
|
re_path(r'^save-clone$', views.save_clone),
|
||||||
re_path(r'^report1$', views.report1),
|
re_path(r'^report1$', views.report1),
|
||||||
|
re_path(r'^report2$', views.report2),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.shortcuts import render, HttpResponseRedirect
|
from django.shortcuts import render, HttpResponseRedirect
|
||||||
|
from django.template.loader import render_to_string
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
from django.contrib.auth import authenticate, login, logout
|
from django.contrib.auth import authenticate, login, logout
|
||||||
from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError
|
from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError
|
||||||
from rosmorport_tsts.models import TbPetsClones
|
from rosmorport_tsts.models import TbPetsClones
|
||||||
|
from time import process_time
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -109,8 +111,23 @@ def report1(request: HttpRequest) -> HttpResponse:
|
|||||||
:param
|
:param
|
||||||
:return response: исходящий http-ответ
|
:return response: исходящий http-ответ
|
||||||
"""
|
"""
|
||||||
|
cpu_start = process_time()
|
||||||
|
to_template = {"PETS": TbPetsClones.objects.all()}
|
||||||
|
to_template.update({"Q_CPU": process_time() - cpu_start})
|
||||||
|
return render(request, template_name="page/report1.jinja", context=to_template)
|
||||||
|
|
||||||
|
|
||||||
|
def report2(request: HttpRequest) -> HttpResponse:
|
||||||
|
""" Отчет по клонированным питомцам
|
||||||
|
|
||||||
|
:param
|
||||||
|
:return response: исходящий http-ответ
|
||||||
|
"""
|
||||||
|
cpu_start = process_time()
|
||||||
to_template = {
|
to_template = {
|
||||||
"META_REFRESH": "3600; url=/logout", # автоматический logout через 10 минут бездействия
|
"PETS": TbPetsClones.objects.all(),
|
||||||
"PETS": TbPetsClones.objects.all()
|
"PET_TYPES": TbPetsClones.PetType.choices,
|
||||||
|
"PET_SEXES": TbPetsClones.PetSex.choices
|
||||||
}
|
}
|
||||||
return render(request, template_name="report1.jinja", context=to_template)
|
to_template.update({"Q_CPU": process_time() - cpu_start})
|
||||||
|
return render(request, template_name="page/report2.jinja", context=to_template)
|
@ -49,7 +49,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<div class="input-group input-group-lg mb-3">
|
<div class="input-group input-group-lg mb-3">
|
||||||
<span class="input-group-text ps-3 pe-2 py-3 bg-dark text-light" id="basic-addon1"><i class="fa-solid fa-ruble-sign"></i></span>
|
<span class="input-group-text ps-3 pe-2 py-3 bg-dark text-light" id="basic-addon1">
|
||||||
|
<i class="fa-solid fa-ruble-sign"></i>
|
||||||
|
</span>
|
||||||
<input type="text" class="form-control" placeholder="Заплачено наличными" aria-label="Заплачено"
|
<input type="text" class="form-control" placeholder="Заплачено наличными" aria-label="Заплачено"
|
||||||
name="pay" required>
|
name="pay" required>
|
||||||
<span class="input-group-text">.00</span>
|
<span class="input-group-text">.00</span>
|
||||||
|
66
rosmorport_tsts/templates-django/page/report1.jinja
Normal file
66
rosmorport_tsts/templates-django/page/report1.jinja
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
{% extends 'base.jinja' %}
|
||||||
|
|
||||||
|
{% block CONTENT %}<div class="row px-3">
|
||||||
|
<div class="col-12 my-2">
|
||||||
|
<h1>Отчёт 1</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12"><table class="table table-sm table-secondary table-striped table-hover">
|
||||||
|
<thead >
|
||||||
|
<tr style="position: sticky;">
|
||||||
|
<th scope="col" title="Серийный номер" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> #</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Имя</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Тип</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Пол</th>
|
||||||
|
<th scope="col" title="Регистрация" class="bg-dark text-light"><i class="fa-solid fa-id-card"></i></th>
|
||||||
|
<th scope="col" title="Состояние здоровья" class="bg-dark text-light"><i class="fa-solid fa-heart"></i></th>
|
||||||
|
<th scope="col" title="Заказчик" class="bg-dark text-light"><i class="fa-solid fa-person"></i></th>
|
||||||
|
<th scope="col" title="Комментарии" class="bg-dark text-light"><i class="fa-solid fa-comment"></i></th>
|
||||||
|
<th scope="col" title="Цена заказа" class="bg-dark text-light text-end"><i class="fa-solid fa-ruble-sign"></i></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody style="font-family: monospace;">
|
||||||
|
{% for PET in PETS %}<tr>
|
||||||
|
<td>{{ PET.szPetSerNum }}</td>
|
||||||
|
<td>{% if PET.szPetName %}{{ PET.szPetName }}{% else %}—{% endif %}</td>
|
||||||
|
<td>{{ PET.iPetType }}</td>
|
||||||
|
<td>{{ PET.iPetSex }}</td>
|
||||||
|
<td>{% if PET.bPetIsReg %}<i class="fa-solid fa-circle-check"></i>{% endif %}</td>
|
||||||
|
<td>{% if not PET.bPetIsAlive %}<i class="fa-solid fa-skull-crossbones"></i>{% endif %}</td>
|
||||||
|
<td>{% if PET.szPetOwner %}{{ PET.szPetOwner }}{% else %}—{% endif %}</td>
|
||||||
|
<td>{% if PET.szPetComment %}<i class="fa-solid fa-comment" title="{{ PET.szPetComment }}"></i>{% endif %}</td>
|
||||||
|
<td class="text-end">{{ PET.szPetPrice }}</td>
|
||||||
|
</tr>{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<nav aria-label="Page navigation example">
|
||||||
|
<ul class="pagination">
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Previous">
|
||||||
|
<span aria-hidden="true">«</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">1</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">2</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">3</a></li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Next">
|
||||||
|
<span aria-hidden="true">»</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<p class="text-sm-end px-4 bg-info-subtle text-info"><small><small><i class="fa-solid fa-microchip"></i>
|
||||||
|
{{ Q_CPU|stringformat:".6f" }}</small></small></p>
|
||||||
|
</div>
|
||||||
|
</div>{% endblock CONTENT %}
|
104
rosmorport_tsts/templates-django/page/report2.jinja
Normal file
104
rosmorport_tsts/templates-django/page/report2.jinja
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
{% extends 'base.jinja' %}
|
||||||
|
|
||||||
|
{% block CONTENT %}<div class="row px-3">
|
||||||
|
<div class="col-6 my-2">
|
||||||
|
<h1>Отчёт 2</h1>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="input-group my-3">
|
||||||
|
<span class="input-group-text" id="pet-type">
|
||||||
|
<i class="fa-solid fa-filter"></i><i class="fa-solid fa-paw"></i>
|
||||||
|
</span>
|
||||||
|
<select class="form-select" aria-label="Тип питомца" id="type">
|
||||||
|
<option selected value="tA">Все</option>{% for TYPE in PET_TYPES %}
|
||||||
|
<option value="t{{ TYPE.0 }}">{{ TYPE.1 }}</option>{% endfor %}
|
||||||
|
</select>
|
||||||
|
<select class="form-select" aria-label="Пол" id="sex">
|
||||||
|
<option selected value="tA">Все</option>{% for SEX in PET_SEXES %}
|
||||||
|
<option value="s{{ SEX.0 }}">{{ SEX.1 }}</option>{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12"><table class="table table-sm table-secondary table-striped table-hover">
|
||||||
|
<thead >
|
||||||
|
<tr style="position: sticky;">
|
||||||
|
<th scope="col" title="Серийный номер" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> #</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Имя</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Тип</th>
|
||||||
|
<th scope="col" class="bg-dark text-light"><i class="fa-solid fa-paw"></i> Пол</th>
|
||||||
|
<th scope="col" title="Регистрация" class="bg-dark text-light"><i class="fa-solid fa-id-card"></i></th>
|
||||||
|
<th scope="col" title="Состояние здоровья" class="bg-dark text-light"><i class="fa-solid fa-heart"></i></th>
|
||||||
|
<th scope="col" title="Заказчик" class="bg-dark text-light"><i class="fa-solid fa-person"></i></th>
|
||||||
|
<th scope="col" title="Комментарии" class="bg-dark text-light"><i class="fa-solid fa-comment"></i></th>
|
||||||
|
<th scope="col" title="Цена заказа" class="bg-dark text-light text-end"><i class="fa-solid fa-ruble-sign"></i></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody style="font-family: monospace;">
|
||||||
|
{% for PET in PETS %}<tr class="t{{ PET.iPetType }} s{{ PET.iPetSex }}">
|
||||||
|
<td>{{ PET.szPetSerNum }}</td>
|
||||||
|
<td>{% if PET.szPetName %}{{ PET.szPetName }}{% else %}—{% endif %}</td>
|
||||||
|
<td>{{ PET.iPetType }}</td>
|
||||||
|
<td>{{ PET.iPetSex }}</td>
|
||||||
|
<td>{% if PET.bPetIsReg %}<i class="fa-solid fa-circle-check"></i>{% endif %}</td>
|
||||||
|
<td>{% if not PET.bPetIsAlive %}<i class="fa-solid fa-skull-crossbones"></i>{% endif %}</td>
|
||||||
|
<td>{% if PET.szPetOwner %}{{ PET.szPetOwner }}{% else %}—{% endif %}</td>
|
||||||
|
<td>{% if PET.szPetComment %}<i class="fa-solid fa-comment" title="{{ PET.szPetComment }}"></i>{% endif %}</td>
|
||||||
|
<td class="text-end">{{ PET.szPetPrice }}</td>
|
||||||
|
</tr>{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<nav aria-label="Page navigation example">
|
||||||
|
<ul class="pagination">
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Previous">
|
||||||
|
<span aria-hidden="true">«</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">1</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">2</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">3</a></li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Next">
|
||||||
|
<span aria-hidden="true">»</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row px-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<p class="text-sm-end px-4 bg-info-subtle text-info"><small><small><i class="fa-solid fa-microchip"></i>
|
||||||
|
{{ Q_CPU|stringformat:".6f" }}</small></small></p>
|
||||||
|
</div>
|
||||||
|
</div>{% endblock CONTENT %}
|
||||||
|
|
||||||
|
{% block JS_1 %}<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#type').change(function(){
|
||||||
|
let point = $(this).find("option:selected").attr('value');
|
||||||
|
if (point === 'tA')
|
||||||
|
$('tbody > tr').show();
|
||||||
|
else {
|
||||||
|
$('tbody > tr').hide();
|
||||||
|
$('tbody > tr.' + point).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#sex').change(function(){
|
||||||
|
let point = $(this).find("option:selected").attr('value');
|
||||||
|
if (point === 'sA')
|
||||||
|
$('tbody > tr').show();
|
||||||
|
else {
|
||||||
|
$('tbody > tr').hide();
|
||||||
|
$('tbody > tr.' + point).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>{% endblock %}
|
Loading…
Reference in New Issue
Block a user