Merge branch 'Requests' of ParkSuMin/Cursovaya into main

This commit is contained in:
2024-12-12 08:38:50 +00:00
committed by Gogs
13 changed files with 60 additions and 67 deletions

View File

@@ -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 ]

View File

@@ -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;

View File

@@ -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;

View File

@@ -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:

View File

@@ -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)

View File

@@ -1 +0,0 @@
SELECT DISTINCT material FROM workpiece;

View File

@@ -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)

View File

@@ -1,4 +0,0 @@
SELECT weight AS 'Вес', price AS 'Цена (в рублях)',
count AS 'Количество', last_update AS 'Дата последнего обновления'
FROM workpiece
WHERE material = '$material'

View 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;

View File

@@ -0,0 +1,5 @@
SELECT
work_id,
name,
price
FROM workpiece;

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"}
]