88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
from dataclasses import dataclass
|
||
from os import path
|
||
|
||
from Database.sql_provider import SQLProvider
|
||
from Database.work import procedure, select_list
|
||
from flask import current_app, session
|
||
|
||
sql_provider = SQLProvider(path.join(path.dirname(__file__), "sql"))
|
||
|
||
|
||
@dataclass
|
||
class InfoRespronse:
|
||
result: tuple
|
||
error_message: str
|
||
status: bool
|
||
|
||
|
||
def check_report(input_data: dict) -> bool:
|
||
db_config = current_app.config["db_config"]
|
||
|
||
result = procedure(db_config, "check_report", tuple(input_data.values()))
|
||
if result is None or result["exist"] == 0:
|
||
return False
|
||
return True
|
||
|
||
|
||
def view_report_model(request, report_list: dict) -> InfoRespronse:
|
||
id = request.form.get("category")
|
||
month = request.form.get("month")
|
||
year = request.form.get("year")
|
||
|
||
data = dict(id=id, month=month, year=year)
|
||
|
||
if session["role"] in report_list[id]["data"]["read"]:
|
||
status = check_report(data)
|
||
if not status:
|
||
return InfoRespronse((), error_message="Отчет не найден", status=False)
|
||
|
||
db_config = current_app.config["db_config"]
|
||
view_script = report_list[id]["data"]["view"]
|
||
_sql = sql_provider.get(f"{view_script}.sql", data)
|
||
result = select_list(db_config, _sql)
|
||
if result is None:
|
||
return InfoRespronse(
|
||
(),
|
||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||
status=False,
|
||
)
|
||
return InfoRespronse(result, error_message="", status=True)
|
||
else:
|
||
return InfoRespronse(
|
||
(),
|
||
error_message="Недостаточно прав для чтения данного отчета!",
|
||
status=False,
|
||
)
|
||
|
||
|
||
def create_report_model(request, report_list: dict) -> InfoRespronse:
|
||
id = request.form.get("category")
|
||
month = request.form.get("month")
|
||
year = request.form.get("year")
|
||
|
||
data = dict(id=id, month=month, year=year)
|
||
|
||
if session["role"] in report_list[id]["data"]["write"]:
|
||
status = check_report(data)
|
||
if status:
|
||
return InfoRespronse((), error_message="Отчет уже существует", status=False)
|
||
|
||
db_config = current_app.config["db_config"]
|
||
proc_name = report_list[id]["data"]["procedure"]
|
||
args = tuple(data.values())
|
||
result = procedure(db_config, proc_name, args)
|
||
|
||
if result is None:
|
||
return InfoRespronse(
|
||
(),
|
||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||
status=False,
|
||
)
|
||
return InfoRespronse((), error_message="", status=True)
|
||
else:
|
||
return InfoRespronse(
|
||
(),
|
||
error_message="Недостаточно прав для создания данного отчета!",
|
||
status=False,
|
||
)
|