diff --git a/App/Report/__init__.py b/App/Report/__init__.py index e85f726..920a71c 100644 --- a/App/Report/__init__.py +++ b/App/Report/__init__.py @@ -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 os import path from datetime import date -from .report_model import view_report, make_report +from .report_model import view_report_model, create_report_model import json with open(path.join(path.dirname(__file__), 'reports.json')) as f: @@ -16,6 +16,20 @@ def menu(): if request.method == 'GET': 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']) @check_auth def create(): @@ -26,20 +40,11 @@ def create(): items=report_list, date_today=date.today()) else: - 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']: - 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) + result = create_report_model(request, report_list) + if result.status: + return render_template("OK.html") 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']) @check_auth @@ -51,19 +56,10 @@ def view(): items=report_list, date_today=date.today()) else: - 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']: - 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) + result = view_report_model(request, report_list) + if result.status: + return render_template("output.html", items=result.result, + header='Результаты отчёта', + link = url_for('report_bp.menu')) else: - return render_template("error.html", error_message='Недосточно прав для чтения данного отчета!') \ No newline at end of file + return render_template("error.html", error_message=result.error_message) \ No newline at end of file diff --git a/App/Report/report_model.py b/App/Report/report_model.py index 468a77e..8127f5e 100644 --- a/App/Report/report_model.py +++ b/App/Report/report_model.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from .db.work import select_list, procedure from .db.sql_provider import SQLProvider -from flask import current_app +from flask import current_app, session from os import path sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql')) @@ -17,32 +17,59 @@ def check_report(input_data: dict) -> bool: return False 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: - status = check_report(input_data) - if status: - return InfoRespronse((), - error_message = 'Отчет уже существует', +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) - data = tuple(input_data.values()) - result = procedure(current_app.config['db_config'], proc_name, data) - if result is None: - return InfoRespronse((), - error_message = 'Ошибка в подключении к базе данных. Свяжитесь с администратором', - status=False) - return InfoRespronse((), error_message='', status=True) \ No newline at end of file +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) \ No newline at end of file diff --git a/App/Report/reports.json b/App/Report/reports.json index fff8dfd..f6ab405 100644 --- a/App/Report/reports.json +++ b/App/Report/reports.json @@ -1,16 +1,22 @@ { - "1": {"name" : "Заготовки", "data": { - "title" : "Отчет о поставках заготовок", - "write" : ["Менеджер"], - "read" : ["Менеджер", "Управляющий"], - "view" : "workpiece_report", - "procedure" : "report_workpiece_2" - }}, - "2": {"name": "Поставщики", "data": { - "title" : "Отчет о поставках поставщиками", - "write" : ["Бухгалтер"], - "read" : ["Бухгалтер", "Управляющий"], - "view" : "sellers_report", - "procedure" : "report_sellers_2" - }} + "1": { + "name" : "Заготовки", + "data": { + "title" : "Отчет о поставках заготовок", + "write" : ["Менеджер"], + "read" : ["Менеджер", "Управляющий"], + "view" : "workpiece_report", + "procedure" : "report_workpiece_2" + } + }, + "2": { + "name": "Поставщики", + "data": { + "title" : "Отчет о поставках поставщиками", + "write" : ["Бухгалтер"], + "read" : ["Бухгалтер", "Управляющий"], + "view" : "sellers_report", + "procedure" : "report_sellers_2" + } + } } \ No newline at end of file