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 %}
Helpful? Dislike 0 Log in to react