Рекомендации от ИС

This commit is contained in:
2024-11-23 11:48:55 +03:00
parent 0b85b57c5d
commit a6c5ef9883
3 changed files with 100 additions and 71 deletions

View File

@@ -1,8 +1,8 @@
from flask import request, Blueprint, render_template, session, url_for from flask import request, Blueprint, render_template, url_for
from checker import check_auth from checker import check_auth
from os import path from os import path
from datetime import date from datetime import date
from .report_model import view_report, make_report from .report_model import view_report_model, create_report_model
import json import json
with open(path.join(path.dirname(__file__), 'reports.json')) as f: with open(path.join(path.dirname(__file__), 'reports.json')) as f:
@@ -16,6 +16,20 @@ def menu():
if request.method == 'GET': if request.method == 'GET':
return render_template('report_menu.html') return render_template('report_menu.html')
# Рекомендации от ИС
# @report_bp.route('/test', methods=['GET'])
# def get_test():
# return render_template('report_basic.html',
# is_write=True,
# title='Создание отчетов',
# items=report_list,
# date_today=date.today())
# @report_bp.route('/test', methods=['POST'])
# def post_test():
# report_response = model(request, report_list)
# return view(report_response)
@report_bp.route('/create', methods=['GET', 'POST']) @report_bp.route('/create', methods=['GET', 'POST'])
@check_auth @check_auth
def create(): def create():
@@ -26,20 +40,11 @@ def create():
items=report_list, items=report_list,
date_today=date.today()) date_today=date.today())
else: else:
id = request.form.get('category') result = create_report_model(request, report_list)
month = request.form.get('month') if result.status:
year = request.form.get('year') return render_template("OK.html")
data = dict(id=id, month=month, year=year)
if session['role'] in report_list[id]['data']['write']:
proc_name = report_list[id]['data']['procedure']
ready_report = make_report(data, proc_name)
if ready_report.status:
return render_template("OK.html")
else:
return render_template("error.html", error_message=ready_report.error_message)
else: else:
return render_template("error.html", error_message='Недостаточно прав для создания данного отчета!') return render_template("error.html", error_message=result.error_message)
@report_bp.route('/view', methods=['GET', 'POST']) @report_bp.route('/view', methods=['GET', 'POST'])
@check_auth @check_auth
@@ -51,19 +56,10 @@ def view():
items=report_list, items=report_list,
date_today=date.today()) date_today=date.today())
else: else:
id = request.form.get('category') result = view_report_model(request, report_list)
month = request.form.get('month') if result.status:
year = request.form.get('year') return render_template("output.html", items=result.result,
data = dict(id=id, month=month, year=year) header='Результаты отчёта',
link = url_for('report_bp.menu'))
if session['role'] in report_list[id]['data']['read']:
ready_report = view_report(data, report_list[id]['data']['view'])
if ready_report.status:
title= f'{report_list[id]['data']['title']} за {data["month"]}-{data["year"]}'
return render_template("output.html", items=ready_report.result,
header=title,
link = url_for('report_bp.menu'))
else:
return render_template("error.html", error_message=ready_report.error_message)
else: else:
return render_template("error.html", error_message='Недосточно прав для чтения данного отчета!') return render_template("error.html", error_message=result.error_message)

View File

@@ -1,7 +1,7 @@
from dataclasses import dataclass from dataclasses import dataclass
from .db.work import select_list, procedure from .db.work import select_list, procedure
from .db.sql_provider import SQLProvider from .db.sql_provider import SQLProvider
from flask import current_app from flask import current_app, session
from os import path from os import path
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql')) sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
@@ -17,32 +17,59 @@ def check_report(input_data: dict) -> bool:
return False return False
return True return True
def view_report(input_data: dict, view_script: str) -> InfoRespronse:
status = check_report(input_data)
if not status:
return InfoRespronse((),
error_message = 'Отчет не найден',
status=False)
_sql = sql_provider.get(f'{view_script}.sql', input_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)
def make_report(input_data: dict, proc_name: str) -> InfoRespronse: def view_report_model(request, report_list: dict) -> InfoRespronse:
status = check_report(input_data) id = request.form.get('category')
if status: month = request.form.get('month')
return InfoRespronse((), year = request.form.get('year')
error_message = 'Отчет уже существует',
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) status=False)
data = tuple(input_data.values()) def create_report_model(request, report_list: dict) -> InfoRespronse:
result = procedure(current_app.config['db_config'], proc_name, data) id = request.form.get('category')
if result is None: month = request.form.get('month')
return InfoRespronse((), year = request.form.get('year')
error_message = 'Ошибка в подключении к базе данных. Свяжитесь с администратором',
status=False) data = dict(id=id, month=month, year=year)
return InfoRespronse((), error_message='', status=True)
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)

View File

@@ -1,16 +1,22 @@
{ {
"1": {"name" : "Заготовки", "data": { "1": {
"title" : "Отчет о поставках заготовок", "name" : "Заготовки",
"write" : ["Менеджер"], "data": {
"read" : ["Менеджер", "Управляющий"], "title" : "Отчет о поставках заготовок",
"view" : "workpiece_report", "write" : ["Менеджер"],
"procedure" : "report_workpiece_2" "read" : ["Менеджер", "Управляющий"],
}}, "view" : "workpiece_report",
"2": {"name": "Поставщики", "data": { "procedure" : "report_workpiece_2"
"title" : "Отчет о поставках поставщиками", }
"write" : ["Бухгалтер"], },
"read" : ["Бухгалтер", "Управляющий"], "2": {
"view" : "sellers_report", "name": "Поставщики",
"procedure" : "report_sellers_2" "data": {
}} "title" : "Отчет о поставках поставщиками",
"write" : ["Бухгалтер"],
"read" : ["Бухгалтер", "Управляющий"],
"view" : "sellers_report",
"procedure" : "report_sellers_2"
}
}
} }