Programming
balans_vs_portfel_v
import polars as pl
import pandas as pd
import numpy as np
import pyarrow as pa
import pyarrow.parquet as pq
import io
import getpass,oracledb,os,json,datetime
import os
import datetime
from . import forms
from . import queries
from .functions import prepare_df, generate_risk_chart, find_summa_and_npl, generate_pie_chart, process_balans
from .process import process_portfel_best
from functions import common_functions
from django.shortcuts import render, redirect
from django.contrib import messages
from django.http import HttpResponse
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
portfel_input_folder = BASE_DIR / "datasets" / "portfel" / "input"
portfel_svod_folder = BASE_DIR / "datasets" / "portfel" / "svod"
portfel_all_folder = BASE_DIR / "datasets" / "portfel" / "all"
balans_svod_folder = BASE_DIR / "datasets" / "balans" / "svod"
utils_path = BASE_DIR / "utils" / "useforauto.xlsx"
def portfel_vs_balans(request):
# Use standard session keys unless user-isolated keys are strictly required by design
portfel_date_str = request.session.get(f"portfel_date_str_{request.user.id}")
if not portfel_date_str:
messages.warning(request, "No date found in session.")
return redirect("portfel-home")
try:
selected_date = datetime.datetime.strptime(
portfel_date_str, "%Y-%m-%d"
).date()
except ValueError:
messages.warning(request, "The selected date format is invalid.")
return redirect("portfel-home")
portfel_filepath = f"{portfel_svod_folder}/svod_{selected_date}.parquet"
balans_filepath = f"{balans_svod_folder}/svod_{selected_date}.parquet"
# Check if files exist safely
if not os.path.exists(portfel_filepath):
messages.error(
request, f"Portfel file for {selected_date} are missing from storage, please select which date you want to see"
)
return redirect("portfel-home")
if not os.path.exists(balans_filepath):
messages.error(
request, f"Balans file for {selected_date} are missing from storage, please select which date you want to see"
)
return redirect("risk-home")
# Read data
portfel = pd.read_parquet(portfel_filepath)
balans = pd.read_parquet(balans_filepath)
# Process balans using the np.select logic we built
balans = process_balans(balans)
# Calculate Portfolio sums (Use float() conversion to prevent serialization errors in Django)
p_brutto = float(portfel["brutto_amount"].sum())
p_spisat = float(portfel["95413_amount"].sum())
p_reserve = float(portfel["reserve_main_amount"].sum())
# Calculate Balans sums
b_sums = balans.groupby("type")["amount"].sum()
b_brutto = float(b_sums.get("brutto", 0))*-1
b_reserve = float(b_sums.get("reserve", 0))
b_spisat = float(b_sums.get("spisat", 0))*-1
# Construct structured matrix for the template looping
comparison_data = [
{
"metric": "Brutto Amount",
"portfel": p_brutto,
"balans": b_brutto,
"diff": p_brutto - b_brutto,
},
{
"metric": "Reserve Main Amount",
"portfel": p_reserve,
"balans": b_reserve,
"diff": p_reserve - b_reserve,
},
{
"metric": "Spisat (95413)",
"portfel": p_spisat,
"balans": b_spisat,
"diff": p_spisat - b_spisat,
},
]
context = {
"selected_date": selected_date,
"comparison_data": comparison_data,
"totals": {
"portfel": p_brutto + p_reserve + p_spisat,
"balans": b_brutto + b_reserve + b_spisat,
"diff": (p_brutto + p_reserve + p_spisat)
- (b_brutto + b_reserve + b_spisat),
},
}
return render(request, "portfel/balans_vs_portfel.html", context)
PO
powerty
Muallif
· Staff
Sen. 18, 2026
Sen. 18, 2026
3
Ko'rishlar
0
Yoqishlar
2m
O'qildi