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'),
]
Helpful? Dislike 0 Log in to react