Merge remote-tracking branch 'origin/master'

This commit is contained in:
2023-12-20 01:06:26 +03:00
2 changed files with 74 additions and 2 deletions

View File

@@ -9,3 +9,9 @@ def to_nested_dict(row):
current_level = current_level[part]
current_level[keys[-1]] = value
return result
def compile_query_to_plain_sql(query) -> str:
return query.statement.compile(compile_kwargs={
'literal_binds': True
})

View File

@@ -1,10 +1,10 @@
from enum import StrEnum
from flask import Blueprint, request
from flask import Blueprint, request, jsonify
from sqlalchemy import func
import auxiliary
import database
import database.enums
sipro_blueprint = Blueprint('sipro', __name__)
@@ -51,3 +51,69 @@ def assembly_info():
result = query.all()
json_result = [auxiliary.to_nested_dict(row) for row in result]
return json_result
@sipro_blueprint.post('/tableAssemblyStats')
def table_assembly_stats():
filters = request.json
date_from = filters.get('from')
date_to = filters.get('to')
dated_query = (
database.Assembly.query
.join(database.User)
.filter(
database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
database.User.is_admin == False
)
.group_by(database.User.login, database.Assembly.user_id)
.with_entities(
database.User.login.label('user_login'),
func.count(database.Assembly.user_id).label('assembled'),
func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
)
)
if len(date_from) > 0 and len(date_to) > 0:
dated_query = dated_query.filter(
database.Assembly.ended_at >= date_from,
database.Assembly.ended_at <= date_to
)
json_result = []
for row in dated_query.all():
json_result.append({
'user_login': row.user_login,
'assembled': row.assembled,
'order_ids': row.order_ids
})
return jsonify(json_result)
@sipro_blueprint.get('/dailyAssemblyData')
def daily_assembly_stats():
query = (
database.Assembly.query
.join(database.User)
.filter(
database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
database.Assembly.ended_at >= func.current_date()
)
.group_by(database.User.login, database.Assembly.user_id)
.with_entities(
database.User.login.label('user_login'),
func.count(database.Assembly.user_id).label('assembled'),
func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
)
)
json_result = []
for row in query.all():
json_result.append({
'user_login': row.user_login,
'assembled': row.assembled,
'order_ids': row.order_ids
})
return json_result