75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
from dataclasses import dataclass
|
|
from .db.work import select_list, procedure
|
|
from .db.sql_provider import SQLProvider
|
|
from flask import current_app, session
|
|
from os import path
|
|
|
|
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:
|
|
result = procedure(current_app.config['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)
|
|
|
|
view_script = report_list[id]['data']['view']
|
|
_sql = sql_provider.get(f'{view_script}.sql', data)
|
|
result = select_list(current_app.config['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)
|
|
|
|
proc_name = report_list[id]['data']['procedure']
|
|
args = tuple(data.values())
|
|
result = procedure(current_app.config['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) |