assembly statistics
This commit is contained in:
@@ -9,3 +9,9 @@ def to_nested_dict(row):
|
|||||||
current_level = current_level[part]
|
current_level = current_level[part]
|
||||||
current_level[keys[-1]] = value
|
current_level[keys[-1]] = value
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def compile_query_to_plain_sql(query) -> str:
|
||||||
|
return query.statement.compile(compile_kwargs={
|
||||||
|
'literal_binds': True
|
||||||
|
})
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
|
from flask import Blueprint, request, jsonify
|
||||||
from flask import Blueprint, request
|
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
|
|
||||||
import auxiliary
|
import auxiliary
|
||||||
import database
|
import database
|
||||||
|
import database.enums
|
||||||
|
|
||||||
sipro_blueprint = Blueprint('sipro', __name__)
|
sipro_blueprint = Blueprint('sipro', __name__)
|
||||||
|
|
||||||
@@ -51,3 +51,65 @@ def assembly_info():
|
|||||||
result = query.all()
|
result = query.all()
|
||||||
json_result = [auxiliary.to_nested_dict(row) for row in result]
|
json_result = [auxiliary.to_nested_dict(row) for row in result]
|
||||||
return json_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.Assembly.ended_at >= date_from,
|
||||||
|
database.Assembly.ended_at <= date_to,
|
||||||
|
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')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user