Programming
result_page_view
def portfel_result(request):
default_page = "total"
selected_date = request.session.get(f"portfel_date_str_{request.user.id}")
portfel_filepath_svod = request.session.get(f'portfel_filepath_svod_{request.user.id}')
if selected_date is None and portfel_filepath is None:
selected_date = common_functions.find_recent_date()
portfel_date_str = str(selected_date)
request.session[f"portfel_date_str_{request.user.id}"] = selected_date_str
portfel_filepath_svod = f"{portfel_svod_folder}/svod_{portfel_date_str}.parquet"
request.session[f"portfel_filepath_svod_{request.user.id}"] = portfel_filepath_svod
portfel_date_str = str(selected_date)
if os.path.exists(portfel_filepath_svod):
print(f'{portfel_filepath_svod} exists')
try:
df = pd.read_parquet(portfel_filepath_svod)
if df.empty:
messages.warning(request, 'Df is empty')
return redirect('portfel-home')
if total_page:
content_all = find_summa_and_npl(df)
content_rk = find_summa_and_npl(df, 'department', 'rk')
content_mk = find_summa_and_npl(df, 'department', 'mk')
content_kk = find_summa_and_npl(df, 'department', 'kk')
grouped_rk = prepare_df(df, 'branch', 'rk')
grouped_mk = prepare_df(df, 'branch', 'mk')
grouped_kk = prepare_df(df, 'branch', 'kk')
try:
chart_rk = generate_risk_chart(grouped_rk, group_col = 'branch', custom_color = '#1e3655')
chart_mk = generate_risk_chart(grouped_mk, group_col = 'branch', custom_color = '#174d39' )
chart_kk = generate_risk_chart(grouped_kk, group_col = 'branch', custom_color = '#5E4D21')
except Exception as e:
print(f"Error happened: {e}")
messages.warning(request, f"Error happened during generating charts: {e}")
return redirect('portfel-home')
context = {
"chart_rk": chart_rk,
"chart_mk": chart_mk,
"chart_kk": chart_kk,
'portfel_date_str':portfel_date_str
}
try:
context.update(content_all)
context.update(content_rk)
context.update(content_kk)
context.update(content_mk)
except Exception as e:
print(f"Could not update the context: {e}")
pass
return render(request, 'portfel/result.html', context=context)
elif kk_page:
content_kk = find_summa_and_npl(df, 'department', 'kk')
grouped_kk_branch = prepare_df(df, 'branch', 'kk')
grouped_kk_passport = prepare_df(df, 'passport', 'kk')
try:
chart_kk_branch = generate_risk_chart(grouped_kk_branch, group_col = 'branch', custom_color = '#5E4D21')
chart_kk_passport = generate_risk_chart(grouped_kk_passport, group_col = 'passport', custom_color = '#5E4D21')
except Exception as e:
print(f"Error happened: {e}")
messages.warning(request, f"Error happened during generating charts: {e}")
return redirect('portfel-home')
context = {
"chart_kk_branch": chart_kk_branch,
"chart_kk_passport": chart_kk_passport,
'portfel_date_str':portfel_date_str
}
try:
context.update(content_kk)
except Exception as e:
print(f"Could not update the context: {e}")
pass
return render(request, 'portfel/result_kk.html', context=context){% extends "base.html" %}
{% load static %}
{% load humanize %}
{% load currency_filters %}
{% block extra_css %}
<link href="{% static 'css/dashboard.css' %}" rel = "stylesheet">
{% endblock extra_css %}
{% block content %}
{% if user.is_authenticated %}
<main class="px-2 py-3">
<div class="container-fluid">
<!-- Header Section -->
<div class="row g-4 mb-4">
<div class="d-flex flex-row gap-2">
<a href="{% url 'home-all' %}" class="btn btn-outline-secondary btn-alfa">Все</a>
<a href="{% url 'home-kk' %}" class="btn btn-outline-secondary btn-alfa">Корпоративный</a>
<a href="{% url 'home-rk' %}" class="btn btn-outline-secondary btn-alfa">Розничный</a>
<a href="{% url 'home-mk' %}" class="btn btn-outline-secondary btn-alfa">Малый</a>
<a href="{% url 'portfel-home' %}" class="btn btn-info btn-download ms-3" data-bs-toggle="tooltip"
data-bs-placement="top"
title="Select another date.">
<i class="fa-solid fa-calendar-days"></i> Календар
</a>
<a href="{% url 'download-portfel-summary' %}" class="btn btn-warning btn-download ms-3" data-bs-toggle="tooltip"
data-bs-placement="top"
title="Скачать сводную таблицу в формате excel.">
<i class="fa-solid fa-file-arrow-down"></i> Скачать
</a>
</div>
<h1 class="page-header">Кредитный портфель за {{ portfel_date_str }}</h1>
</div>
<!-- Total Value Card -->
<div class="row g-4 mb-4">
<div class="col-xl-2 col-md-6">
<a href="#" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body-1 gradient-total position-relative">
<div class="stat-label fw-bold text-uppercase">КП ⇛В Ташкент</div>
<div class="stat-value mt-2 fw-bold">
{{ total_city_portfel|format_currency }}
<span class="value-percentage fw-bold" style="font-size: 0.6em; color: #f8d7a1; margin-left: 5px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Чорсу, ЦОО, ОПЕРУ, ТГФ, МУФ, Сергели, Яшнабад, Юнусабад">
Ф!
</span>
</div>
<div class="overdue-info-1 mt-3 d-flex align-items-center flex-wrap" style="max-width: 97%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;" >
{{total_city_npl|format_currency}}➜{{ total_city_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-solid fa-city fa text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-2 col-md-6">
<a href="#" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body-1 gradient-total position-relative">
<div class="stat-label fw-bold text-uppercase">КП ⇛Вне Ташкент</div>
<div class="stat-value mt-2 fw-bold">
{{ total_village_portfel|format_currency }}
<span class="value-percentage fw-bold" style="font-size: 0.6em; color: #f8d7a1; margin-left: 5px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Наманган, Фергана, Бухара, Самарканд, Коканд, Термез, Нукус, Андижан, Ургенч, Карши">
Ф!
</span>
</div>
<div class="overdue-info-1 mt-3 d-flex align-items-center flex-wrap" style="max-width: 97%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{total_village_npl|format_currency}}➜{{ total_village_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-solid fa-vihara fa text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-4 col-md-6">
<a href="{% url 'home-all' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body-1 gradient-total position-relative">
<div class="stat-label-1 fw-bold text-uppercase">Кредитный Портфель (Все)</div>
<div class="stat-value mt-2 fw-bold">
Портфель: {{ total_portfel|format_currency }}
</div>
<div class="overdue-info mt-3 d-flex align-items-center flex-wrap" style="max-width: 97%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{total_npl|format_currency}}➜{{ total_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-landmark fa-2x text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-2 col-md-6">
<a href="{% url 'currency_home' currency='local' dept='all' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body-1 gradient-total position-relative">
<div class="stat-label fw-bold text-uppercase">КП ⇛ Нац. Валюта</div>
<div class="stat-value mt-2 fw-bold">
{{ total_local_portfel|format_currency }}
<span class="value-percentage fw-bold" style="font-size: 0.6em; color: #f8d7a1; margin-left: 5px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Средняя процентная ставка по кредитам, выданным в узбекских сумах.">
{{ total_local_avg_percent|floatformat:1 }}%
</span>
</div>
<div class="overdue-info-1 mt-3 d-flex align-items-center flex-wrap" style="max-width: 97%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{total_local_npl|format_currency}}➜ {{ total_local_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-coins fa text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-2 col-md-6">
<a href="{% url 'currency_home' currency='global' dept='all' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body-1 gradient-total position-relative">
<div class="stat-label fw-bold text-uppercase">КП ⇛ Иноц. Валюта</div>
<div class="stat-value mt-2 fw-bold">
{{ total_global_portfel|format_currency }}
<span class="value-percentage fw-bold" style="font-size: 0.6em; color: #f8d7a1; margin-left: 5px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Средняя процентная ставка по кредитам, выданным в иностранной валюте.">
{{ total_global_avg_percent|floatformat:0 }}%
</span>
</div>
<div class="overdue-info-1 mt-3 d-flex align-items-center flex-wrap" style="max-width: 97%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{total_global_npl|format_currency}}➜ {{ total_global_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-dollar-sign fa text-warning"></i>
</div>
</div>
</div>
</a>
</div>
</div>
<hr>
<h3 class="page-header">Кредитный Портфель по Департаментам</h3>
<!-- Stats Cards Row -->
<div class="row g-4 mb-4">
<!-- Corporate Department Card -->
<div class="col-xl-4 col-md-6">
<a href="{% url 'home-kk' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body gradient-corporate position-relative">
<div class="stat-label fw-bold text-uppercase">Корпоративное Кредитование</div>
<div class="stat-value mt-2 fw-bold">
Портфель: {{ kk_portfel|format_currency }}
</div>
<div class="overdue-info mt-3 d-flex align-items-center flex-wrap" style="max-width: 92%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{kk_npl|format_currency}}➜{{ kk_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-briefcase fa-2x text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-4 col-md-6">
<a href="{% url 'home-rk' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body gradient-medium position-relative">
<div class="stat-label fw-bold text-uppercase">Розничное Кредитование</div>
<div class="stat-value mt-2 fw-bold">
Портфель: {{ rk_portfel|format_currency }}
</div>
<div class="overdue-info mt-3 d-flex align-items-center flex-wrap" style="max-width: 92%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{rk_npl|format_currency}}➜{{ rk_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-credit-card fa-2x text-warning"></i>
</div>
</div>
</div>
</a>
</div>
<div class="col-xl-4 col-md-6">
<a href="{% url 'home-mk' %}" class="text-decoration-none d-block">
<div class="card stat-card h-100 shadow-sm">
<div class="card-body gradient-small position-relative">
<div class="stat-label fw-bold text-uppercase">Малое Кредитование</div>
<div class="stat-value mt-2 fw-bold">
Портфель: {{ mk_portfel|format_currency }}
</div>
<div class="overdue-info mt-3 d-flex align-items-center flex-wrap" style="max-width: 92%;">
<i class="fas fa-exclamation-triangle text-danger me-2"></i>
<span class="fw-medium">NPL: </span>
<span class="fw-bold text-danger ms-1" style="font-size: 1.3em;">
{{mk_npl|format_currency}}➜{{ mk_npl_percent|floatformat:1 }}%
</span>
</div>
<div class="card-icon position-absolute end-0 top-0 p-3 opacity-90">
<i class="fas fa-store fa-2x text-warning"></i>
</div>
</div>
</div>
</a>
</div>
</div>
<!-- Charts Row -->
<div class="row g-4 mb-4">
<!-- KK Chart -->
<div class="col-xl-4">
<div class="card chart-card h-100">
<div class="card-header">
<i class="fas fa-chart-bar me-2 text-primary"></i>
Корпоративные кредиты по филиалам
</div>
<div class="chart-container">
{{ chart_kk|safe }}
</div>
</div>
</div>
<!-- RK Chart -->
<div class="col-xl-4">
<div class="card chart-card h-100">
<div class="card-header">
<i class="fas fa-chart-bar me-2 text-primary"></i>
Розничные кредиты по филиалам
</div>
<div class="chart-container">
{{ chart_rk|safe }}
</div>
</div>
</div>
<!-- MK Chart -->
<div class="col-xl-4">
<div class="card chart-card h-100">
<div class="card-header">
<i class="fas fa-chart-bar me-2 text-primary"></i>
Малые кредиты по филиалам
</div>
<div class="chart-container">
{{ chart_mk|safe }}
</div>
</div>
</div>
</div>
</div>
</main>
{% else %}
<main class="bg-light d-flex align-items-center justify-content-center vh-100">
<div class="card text-center shadow-lg p-4 border-0" style="max-width: 400px;">
<div class="card-body">
<i class="fas fa-lock fa-4x text-danger mb-3"></i>
<h3 class="card-title">Доступ ограничен</h3>
<p class="card-text text-muted">Чтобы выполнить это действие, необходимо войти в систему.</p>
<a href="{% url 'login' %}" class="btn btn-warning">
<i class="fas fa-sign-in-alt"></i> Войти
</a>
</div>
</div>
</main>
{% endif %}
<script>
// Initialize all tooltips on the page
document.addEventListener('DOMContentLoaded', function () {
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.forEach(function (tooltipTriggerEl) {
new bootstrap.Tooltip(tooltipTriggerEl);
});
});
</script>
{% endblock content %}
PO
powerty
Author
· Staff
Aug. 20, 2026
Aug. 20, 2026
8
Views
0
Likes
7m
Read