Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user