Programming
general_urls
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
import datetime
import os
import io
from django.http import HttpResponse
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from .functions import figures, read_recent_file, pie_by_category,common_function, find_currency, find_gender, find_avg_interest, find_corporate
from monthlyreport.models import MonthlyReportModel
from django.contrib.humanize.templatetags.humanize import intcomma
@login_required
def home(request):
df, df_name = read_recent_file()
lp_total = df['Ос. кр. на балансе(экв.брутто)'].sum()
npl_total = df[df['is_npl']=='yes']['Ос. кр. на балансе(экв.брутто)'].sum()
lp_kk = df[(df['department'] == '01-Кредитный департамент')|(df['department'] == '04-Андерайтинговая служба')]['Ос. кр. на балансе(экв.брутто)'].sum()
lp_rk = df[df['department'] == '02-Розничный департамент']['Ос. кр. на балансе(экв.брутто)'].sum()
lp_mk = df[df['department'] == '03-Малое кредитование']['Ос. кр. на балансе(экв.брутто)'].sum()
df_kk = df[df['department'] == '01-Кредитный департамент'].copy()
df_rk = df[df['department'] == '02-Розничный департамент'].copy()
df_mk = df[df['department'] == '03-Малое кредитование'].copy()
dataframes = [df_kk, df_rk, df_mk]
for i, datadf in enumerate(dataframes):
datadf = datadf.pivot_table(
index='minibank_name',
columns='is_npl',
values='Ос. кр. на балансе(экв.брутто)',
aggfunc='sum'
).reset_index()
datadf = datadf.fillna(0)
datadf['total'] = datadf['yes'] + datadf['no']
datadf = datadf.sort_values('total')
datadf['department'] = ['01-Кредитный департамент', '02-Розничный департамент', '03-Малое кредитование'][i]
dataframes[i] = datadf
df_kk, df_rk, df_mk = dataframes
npl_total_percent = (df[df['is_npl'] == 'yes']['Ос. кр. на балансе(экв.брутто)'].sum() / lp_total * 100) if lp_total != 0 else 0
lp_kk_percent = (df[(df['department'] == '01-Кредитный департамент') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum() / lp_kk * 100) if lp_kk != 0 else 0
lp_rk_percent = (df[(df['department'] == '02-Розничный департамент') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum() / lp_rk * 100) if lp_rk != 0 else 0
lp_mk_percent = (df[(df['department'] == '03-Малое кредитование') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum() / lp_mk * 100) if lp_mk != 0 else 0
npl_kk = df[(df['department'] == '01-Кредитный департамент') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum()
npl_rk = df[(df['department'] == '02-Розничный департамент') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum()
npl_mk = df[(df['department'] == '03-Малое кредитование') & (df['is_npl'] == 'yes')]['Ос. кр. на балансе(экв.брутто)'].sum()
df_gender = common_function(df, 'Половая принадлежность')
female_percent, female_lp, male_percent, male_lp, female_npl, male_npl = find_gender(df_gender)
df_currency = common_function(df, 'currency')
national_percent, national_lp, foreign_percent,foreign_lp, national_npl, foreign_npl = find_currency(df_currency)
local_interest_rate, global_interest_rate = find_avg_interest(df)
all_percentages = [npl_total_percent, lp_kk_percent, lp_rk_percent, lp_mk_percent, female_percent, male_percent,national_percent,foreign_percent, local_interest_rate, global_interest_rate ]
rounded_percentages = [round(val, 1) for val in all_percentages]
npl_total_percent, lp_kk_percent, lp_rk_percent, lp_mk_percent, female_percent, male_percent,national_percent,foreign_percent,local_interest_rate, global_interest_rate = rounded_percentages
fig_kk = figures(df_kk, 'minibank_name', '#5E4D21')
fig_rk = figures(df_rk, 'minibank_name','#5E4D21')
fig_mk = figures(df_mk, 'minibank_name','#5E4D21')
context = {
'national_npl':national_npl, 'foreign_npl':foreign_npl,'lp_total': lp_total,'npl_total':npl_total, 'lp_kk': lp_kk,'lp_rk': lp_rk,'lp_mk': lp_mk,'npl_kk':npl_kk,'npl_rk':npl_rk, 'npl_mk':npl_mk,'npl_total_percent': npl_total_percent,'lp_kk_percent': lp_kk_percent,'lp_rk_percent': lp_rk_percent,'female_npl':female_npl, 'male_npl':male_npl,
'lp_mk_percent': lp_mk_percent,'df_name': df_name,'fig_kk': fig_kk,'fig_rk': fig_rk,'fig_mk': fig_mk,'female_percent':female_percent,'female_lp':female_lp,'male_lp':male_lp,
'male_percent':male_percent,'national_percent':national_percent,'national_lp':national_lp,'foreign_percent':foreign_percent,'foreign_lp':foreign_lp, 'local_interest_rate':local_interest_rate, 'global_interest_rate':global_interest_rate }
return render(request, 'general/home.html', context=context)
def function_together(filter_name):
figma_kk =None
df, df_name = read_recent_file()
lp_total = df['Ос. кр. на балансе(экв.брутто)'].sum()
npl_total = df[df['is_npl']=='yes']['Ос. кр. на балансе(экв.брутто)'].sum()
if filter_name == 'РК':
df = df[df['department'] == '02-Розничный департамент'].copy()
colorise = '#1e3655'
elif filter_name == 'КК':
df = df[(df['department'] == '01-Кредитный департамент')|(df['department'] == '04-Андерайтинговая служба')].copy()
colorise = '#5E4D21'
by_typer = common_function(df, 'counteragent')
figma_kk = figures(by_typer, 'counteragent', colorise)
elif filter_name == 'МК':
df = df[df['department'] == '03-Малое кредитование'].copy()
colorise = '#174d39'
elif filter_name == 'All':
colorise = '#062321'
else:
colorise = '#062321'
lp = df['Ос. кр. на балансе(экв.брутто)'].sum()
npl = df[df['is_npl']=='yes']['Ос. кр. на балансе(экв.брутто)'].sum()
loan_type = common_function(df, 'loan_describe')
loan_type = loan_type.tail(10)
fig_loan_type = figures(loan_type, 'loan_describe', colorise)
branch = common_function(df, 'minibank_name')
fig_branch = figures(branch, 'minibank_name', colorise)
category = common_function(df, 'quality_standart')
fig_cat = pie_by_category(category, 'quality_standart')
npl_percent = (df[df['is_npl'] == 'yes']['Ос. кр. на балансе(экв.брутто)'].sum() / lp * 100) if lp != 0 else 0
df_gender = common_function(df, 'Половая принадлежность')
female_percent, female_lp, male_percent, male_lp,female_npl, male_npl = find_gender(df_gender)
df_currency = common_function(df, 'currency')
national_percent, national_lp, foreign_percent,foreign_lp, national_npl, foreign_npl = find_currency(df_currency)
local_interest_rate, global_interest_rate = find_avg_interest(df)
all_percentages = [npl_percent, female_percent, male_percent,national_percent,foreign_percent,local_interest_rate, global_interest_rate]
rounded_percentages = [round(val, 1) for val in all_percentages]
npl_percent, female_percent, male_percent,national_percent,foreign_percent,local_interest_rate, global_interest_rate = rounded_percentages
context = {'figma_kk':figma_kk,'fig_loan_type':fig_loan_type,'fig_branch':fig_branch, 'df_name':df_name, 'fig_cat':fig_cat,'national_npl':national_npl, 'foreign_npl':foreign_npl,
'npl_percent':npl_percent,'lp':lp,'npl':npl,'female_percent':female_percent,'female_lp':female_lp,'male_lp':male_lp,'male_percent':male_percent,'female_npl':female_npl, 'male_npl':male_npl,
'national_percent':national_percent,'national_lp':national_lp,'foreign_percent':foreign_percent,'foreign_lp':foreign_lp,'local_interest_rate':local_interest_rate, 'global_interest_rate':global_interest_rate}
return context
@login_required
def rk_home(request):
context = function_together('РК')
return render(request, 'general/rk_home.html', context = context)
@login_required
def mk_home(request):
context = function_together('МК')
return render(request, 'general/mk_home.html', context = context)
@login_required
def kk_home(request):
context = function_together('КК')
return render(request, 'general/kk_home.html', context = context)
@login_required
def all_home(request):
context = function_together('All')
return render(request, 'general/all_home.html', context = context)
def currency_together(currency_type, dep_name):
categories = ['0-5%','5-10%', '10-15%', '15-20%', '20-25%', '25-30%','35-40%','+40%']
df, df_name = read_recent_file()
if currency_type == 'local':
df = df[df['currency']=='local'].copy()
else:
df = df[df['currency']=='global'].copy()
if dep_name == 'rk':
df = df[df['department'] == '02-Розничный департамент'].copy()
elif dep_name == 'kk':
df = df[(df['department'] == '01-Кредитный департамент')|(df['department'] == '04-Андерайтинговая служба')].copy()
elif dep_name == 'mk':
df = df[df['department'] =='03-Малое кредитование'].copy()
else:
pass
lp = df['Ос. кр. на балансе(экв.брутто)'].sum()
npl = df[df['is_npl']=='yes']['Ос. кр. на балансе(экв.брутто)'].sum()
df['interest_cat'] = df['Йиллик фоиз ставкаси'].apply(lambda x: '0-5%' if x < 5 else ('5-10%' if x < 10 else ('10-15%' if x < 15 else ('15-20%' if x < 20 else ("20-25%" if x < 25 else ('25-30%' if x < 30 else ('30-35%' if x <35 else ("35-40%" if x < 40 else ("+40%" if x >= 40 else "0-5%")))))))))
df_currency_cat = common_function(df, 'interest_cat')
df_currency_cat['interest_cat'] = pd.Categorical(df_currency_cat['interest_cat'], categories=categories, ordered=True)
df_currency_cat = df_currency_cat.sort_values('interest_cat')
currency_cat_fig = figures(df_currency_cat, 'interest_cat', '#062321')
df_currency_quality = common_function(df, 'quality_standart')
quality_fig = pie_by_category(df_currency_quality, 'quality_standart')
loan_type = common_function(df, 'loan_describe')
loan_type = loan_type.tail(10)
fig_loan_type = figures(loan_type, 'loan_describe', '#062321')
branch = common_function(df, 'minibank_name')
fig_branch = figures(branch, 'minibank_name','#062321')
category = common_function(df, 'quality_standart')
fig_cat = pie_by_category(category, 'quality_standart')
npl_percent = (df[df['is_npl'] == 'yes']['Ос. кр. на балансе(экв.брутто)'].sum() / lp * 100) if lp != 0 else 0
df_gender = common_function(df, 'Половая принадлежность')
female_percent, female_lp, male_percent, male_lp, female_npl, male_npl = find_gender(df_gender)
df_corp = common_function(df, 'is_corporate')
yuridik_percent, yuridik_lp, jismoniy_percent, jismoniy_lp, yuridik_npl,jismoniy_npl = find_corporate(df_corp)
df_yuridik = df[df['is_corporate']=='Yuridik'].copy()
local_yur_interest, global_yur_interest = find_avg_interest(df_yuridik)
df_jismoniy = df[df['is_corporate']=='Jismoniy'].copy()
local_jis_interest, global_jis_interest = find_avg_interest(df_jismoniy)
df_female = df[df['Половая принадлежность']=='Женщина'].copy()
local_female_interest, global_female_interest = find_avg_interest(df_female)
df_male = df[df['Половая принадлежность']=='Мужчина'].copy()
local_male_interest, global_male_interest = find_avg_interest(df_male)
df_currency = common_function(df, 'currency')
local_interest_rate, global_interest_rate = find_avg_interest(df)
all_percentages = [npl_percent, female_percent, male_percent,local_interest_rate, global_interest_rate, yuridik_percent, jismoniy_percent]
rounded_percentages = [round(val, 1) for val in all_percentages]
npl_percent, female_percent, male_percent,local_interest_rate, global_interest_rate, yuridik_percent, jismoniy_percent = rounded_percentages
context = {'fig_loan_type':fig_loan_type,'fig_branch':fig_branch, 'df_name':df_name, 'fig_cat':fig_cat,
'local_yur_interest':local_yur_interest, 'local_jis_interest':local_jis_interest,"global_yur_interest":global_yur_interest,"global_jis_interest":global_yur_interest,
'local_female_interest':local_female_interest, 'global_female_interest':global_female_interest,
"local_male_interest":local_male_interest, "global_male_interest":global_male_interest,
'female_npl':female_npl, 'male_npl':male_npl, 'yuridik_npl':yuridik_npl,'jismoniy_npl':jismoniy_npl,
'npl_percent':npl_percent,'lp':lp,'npl':npl,'female_percent':female_percent,'female_lp':female_lp,'male_lp':male_lp,
'male_percent':male_percent,'yuridik_percent':yuridik_percent,'yuridik_lp':yuridik_lp,'jismoniy_lp':jismoniy_lp,
'jismoniy_percent':jismoniy_percent,'local_interest_rate':local_interest_rate, 'global_interest_rate':global_interest_rate,
'df_name':df_name, 'currency_cat_fig':currency_cat_fig, 'quality_fig':quality_fig}
return context
#all
def currency_home(request, currency='local', dept='all'):
# Validate parameters
valid_currencies = ['local', 'global']
valid_depts = ['all', 'rk', 'kk', 'mk']
if currency not in valid_currencies or dept not in valid_depts:
return HttpResponseBadRequest("Invalid currency or department")
# Map department code to display name
dept_names = {
'all': 'Обшый',
'rk': 'Розничный',
'kk': 'Корпоративный',
'mk': 'Малый'
}
# Map department to gradient class
gradient_classes = {
'all': 'gradient-total',
'kk': 'gradient-corporate',
'rk': 'gradient-medium',
'mk': 'gradient-small'
}
# Get context from currency_together
context = currency_together(currency, dept)
context['dept_name'] = dept_names[dept]
context['currency_type'] = currency
context['dept'] = dept
context['gradient_class'] = gradient_classes[dept] # Add gradient class to context
return render(request, 'general/currency_home.html', context)
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.home, name = 'home'),
path('all/', views.all_home, name = 'home-all'),
path('rk/', views.rk_home, name = 'home-rk'),
path('mk/', views.mk_home, name = 'home-mk'),
path('kk/', views.kk_home, name = 'home-kk'),
#path('gender/', views.gender_home, name = 'home-gender'),
path('currency/<str:currency>/<str:dept>/', views.currency_home, name='currency_home'),
path('download/', views.download_excel_summary, name = 'download-excel-summary'),
#path('currency/', views.currency_home, name='currency_home'),
]
PO
powerty
Author
· Staff
July 27, 2026
Aug. 18, 2026
9
Views
0
Likes
6m
Read