Merge branch 'Requests' of ParkSuMin/Cursovaya into main
This commit is contained in:
@@ -9,3 +9,8 @@ repos:
|
||||
rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/sqlfluff/sqlfluff
|
||||
rev: 3.3.0
|
||||
hooks:
|
||||
- id: sqlfluff-fix
|
||||
args: [ --dialect=mariadb ]
|
||||
@@ -1,8 +1,9 @@
|
||||
SELECT
|
||||
s.name AS Поставщик,
|
||||
SUM(reports.count) AS 'Количество поставок',
|
||||
SUM(reports.sum) AS Сумма
|
||||
reports.sum AS 'Сумма в рублях',
|
||||
reports.count AS 'Количество поставок'
|
||||
FROM reports
|
||||
JOIN sellers s ON reports.item_id = s.sel_id
|
||||
WHERE report_category_id = '$id' AND (month = '$month' AND year = '$year')
|
||||
GROUP BY s.name;
|
||||
GROUP BY s.name
|
||||
ORDER BY s.name;
|
||||
@@ -1,8 +1,8 @@
|
||||
SELECT w.name AS Наименование,
|
||||
w.material AS Материал,
|
||||
sum(sum) AS Сумма,
|
||||
sum(reports.count) AS Количество
|
||||
reports.sum AS 'Сумма в рублях',
|
||||
reports.count AS 'Количество поставленных заготовок'
|
||||
from reports
|
||||
JOIN workpiece w ON reports.item_id = w.work_id
|
||||
WHERE report_category_id = '$id' AND (month = '$month' AND year = '$year')
|
||||
GROUP BY w.material, w.name;
|
||||
GROUP BY w.material, w.name
|
||||
ORDER BY w.name;
|
||||
@@ -4,8 +4,8 @@ from os import path
|
||||
from checker import check_auth
|
||||
from flask import Blueprint, render_template, request, url_for
|
||||
|
||||
from .requests_model import (materials_names, materials_per_seller,
|
||||
sellers_names, sklad)
|
||||
from .requests_model import (materials_per_seller, sellers_names, sklad,
|
||||
workpiece_names)
|
||||
|
||||
with open(path.join(path.dirname(__file__), "zapros_menu.json"), encoding="utf-8") as f:
|
||||
requests_list = json.load(f)
|
||||
@@ -24,12 +24,12 @@ def requests():
|
||||
@check_auth
|
||||
def sklad_zapros():
|
||||
if request.method == "GET":
|
||||
return render_template("zagotovki.html")
|
||||
workpiece = workpiece_names()
|
||||
return render_template("zagotovki.html", workpiece=workpiece)
|
||||
else:
|
||||
zagotovki = sklad(request)
|
||||
if zagotovki.status:
|
||||
material = dict(request.form)
|
||||
header = f'Заготовки на складе из материала "{material["material"]}"'
|
||||
header = "Поставки выбранной заготовки"
|
||||
return render_template("output.html", items=zagotovki.result, header=header)
|
||||
else:
|
||||
return render_template("error.html", error_message=zagotovki.error_message)
|
||||
@@ -39,7 +39,8 @@ def sklad_zapros():
|
||||
@check_auth
|
||||
def sellers_ship():
|
||||
if request.method == "GET":
|
||||
return render_template("sellers_ship.html")
|
||||
sellers = sellers_names()
|
||||
return render_template("sellers_ship.html", sellers=sellers)
|
||||
else:
|
||||
zagotovki = materials_per_seller(request)
|
||||
if zagotovki.status:
|
||||
|
||||
@@ -15,46 +15,28 @@ class InfoRespronse:
|
||||
status: bool
|
||||
|
||||
|
||||
def sellers_names() -> InfoRespronse:
|
||||
def sellers_names() -> list:
|
||||
db_config = current_app.config["db_config"]
|
||||
|
||||
_sql = sql_provider.get("sellers_names.sql", {})
|
||||
result = select_list(db_config, _sql)
|
||||
if result is None:
|
||||
return InfoRespronse(
|
||||
(),
|
||||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||||
status=False,
|
||||
)
|
||||
return InfoRespronse(result, error_message="", status=True)
|
||||
return result
|
||||
|
||||
|
||||
def materials_names() -> InfoRespronse:
|
||||
def workpiece_names() -> list:
|
||||
db_config = current_app.config["db_config"]
|
||||
|
||||
_sql = sql_provider.get("materials_names.sql", {})
|
||||
_sql = sql_provider.get("workpiece_names.sql", {})
|
||||
result = select_list(db_config, _sql)
|
||||
if result is None:
|
||||
return InfoRespronse(
|
||||
(),
|
||||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||||
status=False,
|
||||
)
|
||||
return InfoRespronse(result, error_message="", status=True)
|
||||
return result
|
||||
|
||||
|
||||
def sklad(request) -> InfoRespronse:
|
||||
db_config = current_app.config["db_config"]
|
||||
material = dict(request.form)
|
||||
workpiece = dict(request.form)
|
||||
|
||||
_sql = sql_provider.get("sklad_material.sql", material)
|
||||
_sql = sql_provider.get("sklad_workpiece.sql", workpiece)
|
||||
result = select_list(db_config, _sql)
|
||||
if result is None:
|
||||
return InfoRespronse(
|
||||
(),
|
||||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||||
status=False,
|
||||
)
|
||||
return InfoRespronse(result, error_message="", status=True)
|
||||
|
||||
|
||||
@@ -64,10 +46,4 @@ def materials_per_seller(request) -> InfoRespronse:
|
||||
seller = dict(request.form)
|
||||
_sql = sql_provider.get("ship_seller.sql", seller)
|
||||
result = select_list(db_config, _sql)
|
||||
if result is None:
|
||||
return InfoRespronse(
|
||||
(),
|
||||
error_message="Ошибка в подключении к базе данных. Свяжитесь с администратором",
|
||||
status=False,
|
||||
)
|
||||
return InfoRespronse(result, error_message="", status=True)
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
SELECT DISTINCT material FROM workpiece;
|
||||
@@ -1,7 +1,9 @@
|
||||
SELECT w.waybill_date AS 'Дата поставки',
|
||||
SELECT DATE_FORMAT(w.waybill_date, '%Y-%m-%d') AS 'Дата поставки',
|
||||
TIME_FORMAT(w.waybill_date, '%H:%i') AS 'Время поставки',
|
||||
SUM(w.total) AS 'Общая сумма (в рублях)',
|
||||
SUM(wl.amount) as 'Общее количество заготовок'
|
||||
FROM waybill w
|
||||
|
||||
JOIN (SELECT waybill_id, SUM(amount) AS amount FROM waybill_lines wl GROUP BY waybill_id)wl USING (waybill_id)
|
||||
JOIN (SELECT user_id, sel_id FROM external_users) eu USING(user_id)
|
||||
JOIN (SELECT sel_id, name FROM sellers) s USING(sel_id)
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
SELECT weight AS 'Вес', price AS 'Цена (в рублях)',
|
||||
count AS 'Количество', last_update AS 'Дата последнего обновления'
|
||||
FROM workpiece
|
||||
WHERE material = '$material'
|
||||
12
App/Requests/sql/sklad_workpiece.sql
Normal file
12
App/Requests/sql/sklad_workpiece.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
SELECT
|
||||
DATE_FORMAT(w.waybill_date, '%Y-%m-%d') AS 'Дата поставки',
|
||||
TIME_FORMAT(w.waybill_date, '%H:%i') AS 'Время поставки',
|
||||
s.name AS 'Поставщик',
|
||||
wl.amount AS 'Количество'
|
||||
FROM waybill w
|
||||
|
||||
JOIN (SELECT waybill_id, work_id, amount FROM waybill_lines) wl USING(waybill_id)
|
||||
JOIN (SELECT user_id, sel_id FROM external_users) eu USING(user_id)
|
||||
JOIN (SELECT sel_id, name FROM sellers) s USING(sel_id)
|
||||
WHERE work_id = '$workpiece'
|
||||
GROUP BY waybill_date, name;
|
||||
5
App/Requests/sql/workpiece_names.sql
Normal file
5
App/Requests/sql/workpiece_names.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
SELECT
|
||||
work_id,
|
||||
name,
|
||||
price
|
||||
FROM workpiece;
|
||||
@@ -33,11 +33,9 @@
|
||||
<form action="" method="post" style="display: inline-block;">
|
||||
<label>Выберите поставщика</label>
|
||||
<select class="form-select" name="seller">
|
||||
<option value="Alpha Supplies">Alpha Supplies</option>
|
||||
<option value="Beta Materials">Beta Materials</option>
|
||||
<option value="Gamma Parts">Gamma Parts</option>
|
||||
<option value="Delta Components">Delta Components</option>
|
||||
<option value="Epsilon Goods">Epsilon Goods</option>
|
||||
{% for item in sellers %}
|
||||
<option value="{{ item["name"] }}">{{ item["name"] }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button type="submit" class="btn btn-primary">Отправить</button>
|
||||
</form>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<html lang="ru" data-bs-theme="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Количество заготовок на складе</title>
|
||||
<title>Поставки заготовок на склад</title>
|
||||
<link href="/static/css/main.css" type="text/css" rel="stylesheet">
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="row flex-nowrap justify-content-between pb-5">
|
||||
<div class="col-1 pt-1"></div>
|
||||
<div class="col-10 text-center">
|
||||
<h1 class="display-5 fw-bold">Количество заготовок на складе</h1>
|
||||
<h1 class="display-5 fw-bold">Поставки заготовок на склад</h1>
|
||||
</div>
|
||||
<div class="col-1 d-flex justify-content-end align-items-center">
|
||||
<a href="{{ url_for('logout') }}"><button class="btn btn-danger">Выход</button></a>
|
||||
@@ -32,13 +32,11 @@
|
||||
<main class="flex-shrink-0">
|
||||
<div class="form py-5">
|
||||
<form action="" method="post" style="display: inline-block;">
|
||||
<label>Выберите материал</label>
|
||||
<select class="form-select" name="material">
|
||||
<option value="Сталь">Сталь</option>
|
||||
<option value="Алюминий">Алюминий</option>
|
||||
<option value="Медь">Медь</option>
|
||||
<option value="Пластик">Пластик</option>
|
||||
<option value="Дерево">Дерево</option>
|
||||
<label>Выберите заготовку</label>
|
||||
<select class="form-select" name="workpiece">
|
||||
{% for item in workpiece %}
|
||||
<option value="{{ item["work_id"] }}">{{ item["name"] }} ({{ item["price"] }}руб/шт.)</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button type="submit" class="btn btn-primary">Отправить</button>
|
||||
</form>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[
|
||||
{"name": "Количество заготовок на складе", "url": "requests_bp.sklad_zapros"},
|
||||
{"name": "Поставки поставщиками", "url": "requests_bp.sellers_ship"}
|
||||
{"name": "Поставки заготовок", "url": "requests_bp.sklad_zapros"},
|
||||
{"name": "Работа поставщиков", "url": "requests_bp.sellers_ship"}
|
||||
]
|
||||
Reference in New Issue
Block a user