Compare commits
13 Commits
4b7fb893df
...
c80db764ef
| Author | SHA1 | Date | |
|---|---|---|---|
| c80db764ef | |||
| b98805bc5d | |||
| 7e46ccd589 | |||
| 7fb67f0270 | |||
| eacce0130a | |||
| 07e40e0e47 | |||
| ae5b4cdd8a | |||
| 254f4ff360 | |||
| 2d1f992490 | |||
| ca736ea04f | |||
| 165a826cd0 | |||
| fb8e97472f | |||
| c9d18b62da |
@@ -19,6 +19,8 @@ def procedure(db_config, name, args: tuple) -> list:
|
||||
raise ValueError("Cursor not created")
|
||||
else:
|
||||
cursor.callproc(name, args)
|
||||
result = cursor.fetchone()[0]
|
||||
return result
|
||||
|
||||
|
||||
def transaction(cursor, sql):
|
||||
|
||||
@@ -19,7 +19,7 @@ def check_report(input_data: dict) -> bool:
|
||||
db_config = current_app.config["db_config"]
|
||||
|
||||
result = procedure(db_config, "check_report", tuple(input_data.values()))
|
||||
if result is None or result["exist"] == 0:
|
||||
if result is None or result == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SELECT
|
||||
s.name AS Поставщик,
|
||||
reports.sum AS 'Сумма в рублях',
|
||||
reports.sum AS 'Сумма (в ₽)',
|
||||
reports.count AS 'Количество поставок'
|
||||
FROM reports
|
||||
JOIN sellers s ON reports.item_id = s.sel_id
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SELECT w.name AS Наименование,
|
||||
reports.sum AS 'Сумма в рублях',
|
||||
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')
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
function check_month(now_month, now_year) {
|
||||
let selected_month = document.getElementById('month').value;
|
||||
let selected_year = document.getElementById('year').value;
|
||||
if (selected_month > now_month && selected_year == now_year) {
|
||||
if (selected_month > now_month && selected_year == now_year || selected_year > now_year) {
|
||||
alert('Невозможно сформировать отчет за будущий период!');
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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 'Общее количество заготовок'
|
||||
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)
|
||||
|
||||
@@ -2,7 +2,7 @@ SELECT
|
||||
DATE_FORMAT(w.waybill_date, '%Y-%m-%d') AS 'Дата поставки',
|
||||
TIME_FORMAT(w.waybill_date, '%H:%i') AS 'Время поставки',
|
||||
s.name AS 'Поставщик',
|
||||
wl.amount AS 'Количество'
|
||||
wl.amount AS 'Количество (в шт.)'
|
||||
FROM waybill w
|
||||
|
||||
JOIN (SELECT waybill_id, work_id, amount FROM waybill_lines) wl USING(waybill_id)
|
||||
|
||||
@@ -74,12 +74,12 @@ def button_click(request):
|
||||
session["total"] = str(int(session["total"]) + price)
|
||||
session.modified = True
|
||||
else:
|
||||
print("NEW WORKPIECE")
|
||||
# print("NEW WORKPIECE")
|
||||
pr_id = product["work_id"]
|
||||
price = product["price"]
|
||||
session["waybill"][str(pr_id)] = "1"
|
||||
session["total"] = str(int(session["total"]) + price)
|
||||
print(session["waybill"])
|
||||
# print(session["waybill"])
|
||||
session.modified = True
|
||||
|
||||
elif request.form.get("product_display_minus"):
|
||||
@@ -121,7 +121,7 @@ def transaction_order_model(user_id: int, current_date: date) -> InfoRespronse:
|
||||
),
|
||||
)
|
||||
cursor.execute(_sql)
|
||||
result = tuple([order_id])
|
||||
result = tuple([order_id])
|
||||
if result is None:
|
||||
return InfoRespronse((), error_message="Заказ не был создан", status=False)
|
||||
clear()
|
||||
|
||||
@@ -39,22 +39,34 @@
|
||||
<div class="col-md-4">
|
||||
<h4>Накладная</h4>
|
||||
{% if waybill %}
|
||||
{% for item in waybill %}
|
||||
{{ card.render_item(item, show_form = False, show_amount = True) }}
|
||||
{% endfor %}
|
||||
<div class="mt-3">
|
||||
<h5>Итого: {{ session.get('total', '0') }} ₽</h5>
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="row row-cols-1 g-3">
|
||||
{% for item in waybill %}
|
||||
<div class="col">
|
||||
{{ card.render_item(item, show_form = False, show_amount = True) }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 d-flex flex-column">
|
||||
<h5 class="mb-3">Итого: {{ session.get('total', '0') }} ₽</h5>
|
||||
<div class="d-flex flex-column gap-2">
|
||||
<a href="{{url_for('waybill_bp.save_order')}}"><button class="btn btn-primary">Оформить накладную</button></a>
|
||||
<a href="{{url_for('waybill_bp.clear_waybill')}}"><button class="btn btn-danger">Очистить накладную</button></a>
|
||||
<a href="{{url_for('index')}}"><button class="btn btn-secondary">На главную</button></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-grid gap-2 mt-3">
|
||||
<a href="{{url_for('waybill_bp.save_order')}}"><button class="btn btn-primary">Оформить накладную</button></a>
|
||||
<a href="{{url_for('waybill_bp.clear_waybill')}}"><button class="btn btn-danger">Очистить накладную</button></a>
|
||||
<a href="{{url_for('index')}}"><button class="btn btn-secondary">На главную</button></a>
|
||||
</div>
|
||||
{% else %}
|
||||
<span>Ваша накладная пуста</span>
|
||||
<div class="d-grid gap-2 mt-3">
|
||||
<a href="{{url_for('index')}}"><button class="btn btn-secondary">На главную</button></a>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<span>Ваша накладная пуста</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="{{url_for('index')}}"><button class="btn btn-secondary">На главную</button></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
import os
|
||||
|
||||
from Auth import auth_bp
|
||||
from flask import Flask, render_template, session
|
||||
from flask import Flask, redirect, render_template, session
|
||||
from Report import report_bp
|
||||
from Requests import requests_bp
|
||||
from Waybill import waybill_bp
|
||||
@@ -45,7 +45,7 @@ def index():
|
||||
@app.route("/logout")
|
||||
def logout():
|
||||
session.clear()
|
||||
return render_template("main_menu.html", ses=session)
|
||||
return redirect("/")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
4
App/cache/wrapper.py
vendored
4
App/cache/wrapper.py
vendored
@@ -17,11 +17,11 @@ def fetch_from_cache(cache_name: str, cache_config: dict):
|
||||
@wraps(f)
|
||||
def wrapper(*args, **kwargs):
|
||||
cached_value = cache_conn.get_value(cache_name)
|
||||
print("cached_value=", cached_value)
|
||||
# print("cached_value=", cached_value)
|
||||
if cached_value:
|
||||
return cached_value
|
||||
response = f(*args, **kwargs)
|
||||
print("response=", response)
|
||||
# print("response=", response)
|
||||
cache_conn.set_value(cache_name, response, ttl)
|
||||
return response
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ def check_auth(func):
|
||||
return redirect(url_for("auth_bp.auth"))
|
||||
user_role = session.get("role")
|
||||
user_request = request.endpoint
|
||||
print("request_endpoint=", user_request)
|
||||
# print("request_endpoint=", user_request)
|
||||
user_bp = user_request.split(".")[0]
|
||||
access = current_app.config["db_access"]
|
||||
if user_role in access and user_bp in access[user_role]:
|
||||
|
||||
18
Dockerfile
Normal file
18
Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
# Use the official Python image as a base
|
||||
FROM python:3.9.20-alpine3.19
|
||||
|
||||
# Set the working directory inside the container
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the contents of the 'App' folder to the working directory
|
||||
COPY App/ /app
|
||||
|
||||
# Copy the requirements file to the working directory
|
||||
COPY requirements.txt /app
|
||||
|
||||
# Install the dependencies from the requirements file
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
EXPOSE 5001
|
||||
# Command to run the application
|
||||
CMD ["gunicorn", "--bind", "0.0.0.0:5001", "app:app"]
|
||||
4
build.sh
Executable file
4
build.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
docker build -t tsettaro/kursovaya-ris:latest .
|
||||
docker push tsettaro/kursovaya-ris:latest
|
||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
Reference in New Issue
Block a user